class_name的未定义方法'model_name'?

时间:2012-06-24 04:28:49

标签: ruby-on-rails ruby ruby-on-rails-3

我试图抓住用户的工作笔记,但我不确定我做错了什么。起初我能够得到这份工作,当我只嵌套这两个工作时注意工作正常但当我想获得用户工作笔记时,我的代码就破了。

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

3 个答案:

答案 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