Получение fields_for для работы с отношением has_many - PullRequest
5 голосов
/ 27 февраля 2012

У меня возникают проблемы при создании вложенной модели модели.

Вот мои модели:

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

В контроллере Workout вот что у меня есть для нового действия:

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 %>

Что я делаю не так?

Ответы [ 2 ]

6 голосов
/ 02 марта 2012

Оказывается, в Rails 3 мне нужно использовать <% = fields_for ...%> вместо <% fields_for ...%>.

0 голосов
/ 28 февраля 2012

Попробуйте добавить следующее к вашей 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 с соответствующим полем, которое необходимо для создания счета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...