2012-02-27 63 views
5

我无法生成嵌套的模型表单。获取fields_for以has_many关系工作

这里是我的模型:

class Workout < ActiveRecord::Base 
    has_many :scores 
    has_many :users, :through => :scores 
    accepts_nested_attributes_for :scores 
end 

class Score < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :workout 
end 

class User < ActiveRecord::Base 
    has_many :scores 
    has_many :workout, :through => :scores 
end 

在锻炼控制器,这里就是我有新动作:

def new 
    @workout = Workout.new 
    3.times { @workout.scores.build } 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @wod } 
    end 
end 

然而,在形式,当我尝试fields_for,我不没有得到任何东西:

<% f.fields_for :scores do |builder| %> 
    <p> 
     <%= builder.label :score %><br /> 
     <%= builder.text_field :score %> 
    </p> 
<% end %> 

我在做什么错?

+0

什么是“Wod”,你为什么在你的锻炼控制器中创建它? – 2012-02-27 01:43:48

+0

这是一个错字。固定! – Huey 2012-02-27 01:53:43

回答

6

原来在Rails 3中,我需要使用<%= fields_for ...%>而不是<%fields_for ...%>。

0

尝试添加以下到您的Workout型号:

attr_accessible :scores_attributes 

accepts_nested_attributes_for :scores 

如果你想确保得分没有得到建立,除非是有效的,并且是可以通过关系,你可以被摧毁扩展为:

attr_accessible :scores_attributes 

accepts_nested_attributes_for :scores, reject_if: proc { |a| a[:field].blank? }, allow_destroy: true 
validates_associated :scores 

只需切换:field与将要创建一个分数,需要相关领域。

+0

傻我,问题是使用<%fields_for ...%>而不是<%= – Huey 2012-03-01 06:28:28