我试图抓住用户的工作笔记,但我不确定我做错了什么。起初我能够得到这份工作,当我只嵌套这两个工作时注意工作正常但当我想获得用户工作笔记时,我的代码就破了。
notes.controller new
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
在rails控制台中,如果我输入以下代码,它可以正常工作。
User.last.jobs
如果我尝试编码,则不会
User.last.jobs.notes
然后我收到错误
undefined method `notes' for #<Job:0x007fe37dc77190>
如何在为作业创建笔记时正确抓取user_id?现在它抓取了笔记的作业ID,但没有获取用户ID。我希望能够找到工作和用户的笔记。任何想法我做错了什么以及如何解决这个问题?
答案 0 :(得分:1)
基本的错误是你要问2个has_many关系。这是不可能的。你可以这样做:
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 :(得分:1)
当您使用has_many :through
时,您应该使用:
User.last.notes
这将通过作业获得最后一个用户的笔记
答案 2 :(得分:0)
你的笔记模型看起来有拼写错误,应该是
has_many :jobs
而不是
has_jobs