Jas*_*Kim 3 ruby-on-rails associations ruby-on-rails-3 ruby-on-rails-3.1
控制器
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
Run Code Online (Sandbox Code Playgroud)
楷模
class Experience < ActiveRecord::Base
belongs_to :resume
end
class Resume < ActiveRecord::Base
has_one :webconnection
has_many :experiences
end
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个简历时出现错误消息(这也创建了一个与简历相关的经验)
NoMethodError in ResumesController#create
undefined method `build_experience' for #<Resume:0xbb428a4>
Run Code Online (Sandbox Code Playgroud)
我觉得我已经把所有东西都放在了适当位置,但却错过了一个's'或某个地方.知道我为什么会收到这个错误吗?
通常build_experience在使用has_one或belongs_to关联时使用.这是webconnection因为它是一个has_one协会.
has_many但是与关联有区别:你必须build在关联上调用方法,如下所示:resume.experiences.build.这表明
因为这是一个has_many关联,而不是一个has_one或一个belongs_to,你应该使用resume.experiences.build.