Pergunta

Estou tendo problemas para gerar um formulário de modelo aninhado.

Aqui estão meus modelos:

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

No controlador Workout, aqui está o que tenho para a nova ação:

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

Porém, no formulário, quando tento o Fields_for, não recebo nada:

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

O que estou fazendo de errado?

Foi útil?

Solução

Acontece que no Rails 3, preciso usar <%=fields_for ...%> em vez de <% campos_for ...%>.

Outras dicas

Tente adicionar o seguinte ao seu Workout modelo:

attr_accessible :scores_attributes

accepts_nested_attributes_for :scores

Se você quiser ter certeza de que uma pontuação não será construída a menos que seja válida, e que possa ser destruída por meio do relacionamento, você pode expandir para:

attr_accessible :scores_attributes

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

Basta mudar :field com um campo relevante que é necessário para a criação de uma pontuação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top