3

控制器在NoMethodError創建具有的has_many關聯結果的對象

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'或某個地方。任何想法,爲什麼我得到這個錯誤?

回答

8

當使用has_onebelongs_to關聯時,您通常會使用build_experience。它適用於webconnection,因爲它是has_one關聯。

雖然與has_many的關聯有所不同:您必須在關聯上調用build方法,如下所示:resume.experiences.build。這表示

因爲這是一個has_many關聯而不是一個has_onebelongs_to,您應該使用resume.experiences.build

1

今後,如果你有這樣的錯誤,有檢查像這個 - 例如方法最簡單的方法@ resume.methods你會得到方法列表。

相關問題