user -notes relationship

30 views
Skip to first unread message

Turcu Marius

unread,
Aug 15, 2014, 2:58:02 PM8/15/14
to rubyonra...@googlegroups.com
i have 2 models
class User < ActiveRecord::Base
has_many :notes, :dependent => :destroy
accepts_nested_attributes_for :notes
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable

end


class Note < ActiveRecord::Base
belongs_to :user
validates :content, presence: true,length: { minimum: 15 }

end

the database schema

create_table "notes", primary_key: "note_id", force: true do |t|
t.text "content"
t.integer "user_id"
end



create_table "users", primary_key: "user_id", force: true do |t|
t.string "first_name"
t.string "last_name"
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "admin", default: false
end

this is my method for saving notes
def save_note
@note = Note.new(lesson_params)

if @note.save
flash[:notice] = "You have successfully add a lesson."
redirect_to pages_home_url
else
flash[:notice] = "Failed."
redirect_to pages_home_url
end
end


private

def lesson_params
params.require(:note).permit(
:content)
end
end

when i save a note isn't put in my database the user_id and I don't know
why...I have to extract the curent user_id and i don't preaty much kknow
how to do it. Also, i check in console and this i get :" INSERT INTO
`notes` (`content`) VALUES ('asdasd asdakshdasmd ')". It seems like my
user_id isn't inserted in db. i came from another world called php and
there the things are different.

--
Posted via http://www.ruby-forum.com/.

Sean Kelley

unread,
Aug 15, 2014, 4:20:38 PM8/15/14
to rubyonra...@googlegroups.com
I must be honest- I am running into this problem myself learning rails.  I thought that when I create something the user_id should be generated automatically in the created model.  While testing I figured I would come back to it.  In the meantime I set user_id in my entry table manually in the create method ( I am using devise):
@entry = Entry.new(entry_params)
@entry.user_id=current_user[:id]

Jason Fleetwood-Boldt

unread,
Aug 15, 2014, 4:30:18 PM8/15/14
to rubyonra...@googlegroups.com

On Aug 15, 2014, at 4:20 PM, Sean Kelley <kelle...@gmail.com> wrote:

I must be honest- I am running into this problem myself learning rails.  I thought that when I create something the user_id should be generated automatically in the created model.  While testing I figured I would come back to it.  In the meantime I set user_id in my entry table manually in the create method ( I am using devise):
@entry = Entry.new(entry_params)
@entry.user_id=current_user[:id]


Jason Fleetwood-Boldt

unread,
Aug 15, 2014, 4:38:04 PM8/15/14
to rubyonra...@googlegroups.com
I assume the above code is in a CONTROLLER. If so, you should stick to the controller actions index, new, create, edit, update, and show. Avoid creating a controller action with another name. 

You didn't show us the VIEW. In the VIEW, does the form you are submitting contain a user_id ? If not, that is why you don't have a user_id  in your notes record.

If this note is supposed to be associated to the currently logged in user, you'll want to add 

before_filter authenticate_user!

to the top of your controller, and also in your create method do something like this:

current_user.notes.create(lesson_params)


You will find this documented in the section marked "has_many Association Reference" on this page:


(By the way, the current_user method itself comes from devise, which documentation you should thoroughly read here: https://github.com/plataformatec/devise)

Finally, get yourself RubyMine and learn how to use the Go-To-Declaration (Command-B). Do that NOW before you go any further. (Another IDE is acceptable too if it has Go-To-Declaration functionality) 





 private

 def lesson_params
   params.require(:note).permit(
     :content)
 end
end

when i save a note isn't put in my database the user_id and I don't know
why...I have to extract the curent user_id and i don't preaty much kknow
how to do it. Also, i check in console and this i get :" INSERT INTO
`notes` (`content`) VALUES ('asdasd asdakshdasmd ')". It seems like my
user_id isn't inserted in db. i came from another world called php and
there the things are different.

-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ed67b2d2cb8937bf30ffd1595db591b6%40ruby-forum.com.
For more options, visit https://groups.google.com/d/optout.


Colin Law

unread,
Aug 15, 2014, 4:55:00 PM8/15/14
to rubyonra...@googlegroups.com
On 15 August 2014 19:57, Turcu Marius <li...@ruby-forum.com> wrote:
> i have 2 models
> class User < ActiveRecord::Base
> has_many :notes, :dependent => :destroy
> accepts_nested_attributes_for :notes
> devise :database_authenticatable, :registerable,
> :recoverable, :rememberable, :trackable, :validatable
>
> end
>
>
> class Note < ActiveRecord::Base
> belongs_to :user
> validates :content, presence: true,length: { minimum: 15 }
>
> end
>
> the database schema
>
> create_table "notes", primary_key: "note_id", force: true do |t|

Why are you not using the default primary key (id)? You will just
make life difficult if you avoid the rails conventions unless you have
a good reason for so doing.

Colin

Mahcsig

unread,
Aug 15, 2014, 6:05:21 PM8/15/14
to rubyonra...@googlegroups.com
If you update this: 
@note = Note.new(lesson_params)

to:
@note = current_user.notes.new(lesson_params)

that should work the way you want.


~Mahcsig



Reply all
Reply to author
Forward
0 new messages