user -notes relationship

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.

If you update this:

@note = Note.new(lesson_params)

to:

@note = current_user.notes.new(lesson_params)

that should work the way you want.

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]

see http://guides.rubyonrails.org/association_basics.html#has-one-association-reference

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

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:

http://guides.rubyonrails.org/association_basics.html#has-many-association-reference

(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)

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