在关联表中放置数据

时间:2014-05-23 17:37:11

标签: ruby-on-rails ruby associations views

我有一个名为Imprintable的类,其中包含此

class Imprintable < ActiveRecord::Base
  has_one :brand
  # ...

我还有一个名为Style的类,其中包含以下内容:

class Style < ActiveRecord::Base
  belongs_to :imprintable
  # ...

我的Styles架构包含一个名为imprintable_id的整数形式的可压缩表的外键

我正在尝试在视图中显示名为catalog_no的样式表中的属性,以编辑有关可压印的信息。我知道我的错误是因为样式不存在作为imprintable表的成员,但我不确定如何从样式表中的相应条目访问catalog_no的名称。 HTML是这样的:

<!-- language: HTML -->
<div class="box-info">
  <%= render partial: 'shared/modal_errors', locals: {object: imprintable} %>
    <%= form_for(imprintable) do |f| %>
      <div id="horizontal-form" class="collapse in">
      <!-- Lots of HTML.. -->

      <div class="form-group">
        <%= f.label :style.catalog_no, class: 'col-sm-2 control-label' %>
        <div class="col-sm-10">
          <%= f.text_field :style.catalog_no, class: 'form-control' %>
          <!-- Problem is on the above line!! -->
          <p class="help-block">The catalog number of the imprintable
        </div>
      </div>
    </div>
  <% end %>
</div>

谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

您应该使用嵌套表单

Model Imprintable看起来像这样:

class Imprintable < ActiveRecord::Base
  has_one :brand
  accepts_nested_attributes_for :style
end

在控制器编辑操作中

def edit
  @imprintable = Imprintable.find(params[:id]) 
end

在视图文件中edit.html.erb看起来像

<div class="box-info">
  <%= render partial: 'shared/modal_errors', locals: {object: imprintable} %>
    <%= form_for(@imprintable) do |f| %>
      <div id="horizontal-form" class="collapse in">
       <%= f.fields_for :style do |d| %>
      <div class="form-group">
        <%= d.label :catalog_no, class: 'col-sm-2 control-label' %>
        <div class="col-sm-10">
          <%= d.text_field :catalog_no, class: 'form-control' %>
          <p class="help-block">The catalog number of the imprintable
        </div>
      </div>
       <% end %>
    </div>
  <% end %>
</div>

如果你正在使用rails 4,请不要忘记将style_attibutes添加到impritable_params方法

private
  def impritable_params
    ## params.require(:your_model).permit(:fields_of_model, association_model_attributes: [:fields_of_association_models])
    params.require(:imprintable).permit(style_attributes: [:id, :catalog_no])
  end
end