使用has_many关联创建对象会导致NoMethodError

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'或某个地方.知道我为什么会收到这个错误吗?

Rya*_*igg 8

通常build_experience在使用has_onebelongs_to关联时使用.这是webconnection因为它是一个has_one协会.

has_many但是与关联有区别:你必须build在关联上调用方法,如下所示:resume.experiences.build.这表明

因为这是一个has_many关联,而不是一个has_one或一个belongs_to,你应该使用resume.experiences.build.