嵌套的属性一到一个关系(Nested attributes for one-to-one relat

2019-10-28 20:51发布

我有一个公司它有一个订阅。 现在我想一个表单来添加或编辑公司和认​​购,所以我用“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版本

Answer 1:

我想你应该改变你的新行动:

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

请参阅文档以获取更多信息。 那么我认为你必须添加subscription_attributes到attr_accessible你的公司定义的列表。



文章来源: Nested attributes for one-to-one relation