0

我正在尝试获取用户工作说明,但不确定我做错了什么。起初,当我只嵌套两者时,我能够得到工作和笔记正常工作,但是当我想获得用户工作笔记时,我的代码就坏了。

notes.controller 新

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

private 

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

用户.rb

has_many :jobs
has_many :notes, through: :jobs

工作.rb

belongs_to :user
belongs_to :note

笔记.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。我希望能够从工作和用户中找到笔记。任何想法我做错了什么以及如何解决这个问题?

4

3 回答 3

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
于 2012-06-24T06:04:49.567 回答
1

当您使用has_many :through时,您应该只使用:

User.last.notes

这将通过作业获取最后一个用户的笔记

于 2012-06-26T17:33:51.887 回答
0

你的笔记模型看起来有错字,应该是

has_many :jobs

代替

has_jobs
于 2012-06-24T04:30:31.780 回答