Вложенные атрибуты для отношения один-к-одному - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть компания, у которой есть одна подписка.Теперь мне нужна форма для добавления или редактирования компании и подписки, поэтому я использую «accepts_nested_attributes_for».Это (часть) модели компании:

  has_one :subscription, :dependent => :destroy
  accepts_nested_attributes_for :subscription

Это (часть) модели подписки:

  belongs_to :company

В контроллере у меня есть это:

  def new
    @company = Company.new(:subscription => [Subscription.new])
  end

  def create
    @company = Company.new(params[:company])

    if @company.save
      redirect_to root_path, notice: I18n.t(:message_company_created)
    else
      render :action => "new"
    end
  end

  def edit
    @company = Company.find(params[:id])
  end

  def update
    @company = Company.find(params[:id])

    if @company.update_attributes(params[:company])
      redirect_to root_path, :notice => I18n.t(:message_company_updated)
    else
      render :action => "edit"
    end

  end

И форма выглядит следующим образом:

      <%= f.fields_for(:subscription) do |s_form| %>
        <div class="field">
            <%= s_form.label I18n.t(:subscription_name) %>
        <%= s_form.text_field :name %>
      </div>
  <% end %>

Это дает 2 проблемы:

  • Поле имени отображается только в форме редактирования, когда компания уже имеет подписку, не отображается при добавлении новой компании
  • При редактировании компании и изменении поля имени подписки изменение не сохраняется.

Что я делаю неправильноВот?

Я использую Rails версии 3.1

1 Ответ

2 голосов
/ 01 декабря 2011

Я думаю, вы должны изменить свое новое действие на:

def new
  @company = Company.new
  @company.build_subscription
end

См. документы для получения дополнительной информации. Тогда я думаю, что вам нужно добавить subscription_attributes в список attr_accessible определения вашей компании.

...