ongedefinieerde methode 'modelnaam' voor class_name?

Ik probeer een aantekening te krijgen van een gebruikersjob, maar weet niet zeker wat ik verkeerd doe. In eerste instantie was ik in staat om de klus te klaren en nota te nemen van het goede werk toen ik alleen de twee nestelde maar toen ik de opmerkingen van de gebruiker wilde krijgen, brak mijn code.

notes.controller nieuw

def new
  @note = @user_note.notes.new
end

private 

def user_note
    @user = current_user
    @job = @user.job.find(params[:job_id])
end

user.rb

has_many :jobs
has_many :notes, through: :jobs

job.rb

belongs_to :user
belongs_to :note

notes.rb

has_many :jobs
has_many :users, through: :jobs

In rails console als ik de volgende code zou typen, werkt het prima.

User.last.jobs

Als ik hieronder zou proberen te coderen, doet dat niet

User.last.jobs.notes

dan krijg ik de fout

undefined method `notes' for #

How can I properly grab the user_id when creating a note for a job? right now it grabs the job id for the note but does not grab the user id. I would like to be able to find notes from a job and user. Any ideas what I am doing wrong and how I can fix this?

0

3 antwoord

Aangezien u has_many: through gebruikt, moet u alleen het volgende gebruiken:

User.last.notes

Hiermee krijgt u de opmerkingen van de laatste gebruiker via opdrachten

1
toegevoegd

De basisfout is dat je door 2 veel verschillende relaties hebt gevraagd. Dit is niet mogelijk. Je zou zoiets als kunnen doen:

user = User.last
user.jobs  # returns all the user's jobs
user.notes # returns all the user's notes
user.jobs.each_with_object({}) {|job, hash| hash[:job.id] = job.note_ids]} 
  # returns a hash with user's job_id as keys and an array of related note_ids as value
1
toegevoegd

je notities model ziet eruit alsof het een typfout heeft

has_many :jobs

in plaats van

has_jobs
0
toegevoegd