控制器
class ExperiencesController < ApplicationController
def create
@resume = Resume.find(params[:resume])
@experience = @resume.build_experience(params[:experience])
end
end
class ResumesController < ApplicationController
def create
@resume = Resume.new(params[:resume])
@resume.build_webconnection
@resume.build_experience # <<<<<<<<< Error occurs here
if @resume.save
#UserMailer.created_resume_email(@user).deliver
redirect_to @resume
else
@title = "Create a new resume"
render :action => "new"
end
end
end
模型
class Experience < ActiveRecord::Base
belongs_to :resume
end
class Resume < ActiveRecord::Base
has_one :webconnection
has_many :experiences
end
尝试创建简历时出现错误消息(也创建与简历相关联的体验)
NoMethodError in ResumesController#create
undefined method `build_experience' for #<Resume:0xbb428a4>
我觉得我已经把所有东西都放在了一边,但却错过了一个's'或某个地方。知道我为什么会收到这个错误吗?
答案 0 :(得分:8)
使用build_experience
或has_one
关联时,通常会使用belongs_to
。它适用于webconnection
,因为它是has_one
关联。
但has_many
关联存在差异:您必须在关联上调用build
方法,如下所示:resume.experiences.build
。这表明
由于这是has_many
关联,而不是has_one
或belongs_to
,因此您应该使用resume.experiences.build
。
答案 1 :(得分:1)
从此以后如果你有这样的错误,有最简单的方法来检查这样的方法 - 例如@ resume.methods您将获得方法列表。