Rails在更新模型表单上创建和销毁嵌套属性

时间:2013-07-31 13:33:51

标签: ruby-on-rails forms model nested

我有Products模型has_many :tags

标签是在产品创建时创建的。

当我更新产品时,我可以更新所有属性,包括标签的属性。

但我的问题是,如何在产品更新表单上更新产品时删除标记或创建另一个标记?

我是否必须创建单独的标签表格或类似的东西?

以下是我的更新产品表单:

<%= form_for(@product), id: 'edit_form' do |f| %>
    <div class="field">
        <%= f.label :name %><br>
        <%= f.text_field :name %>
      </div>
      <div class="field">
        <%= f.label :description %><br>
        <%= f.text_area :description %>
      </div>
      <div class="field">
        <%= f.label :location %><br>
        <%= f.text_field :location %>
      </div>
      <div class="field">
        <%= f.label :price %><br>
        <%= f.text_field :price %>
      </div>
        <%= f.fields_for :tags do |t| %>
        <div class="field">
          <%= t.label "Hashtag" %>
          <%= t.text_field :name %>
        </div>
        <% end %>
      <div class="actions">
        <%= f.submit "Update this item" %>
      </div>
    <% end %>

2 个答案:

答案 0 :(得分:0)

我认为使用gem 'nested_form'会很容易。您可以获取存储库here

答案 1 :(得分:0)

如何为同一个产品添加同名的标签?

我认为您taggings的数据库架构错误,现在您在代码product_id中使用table,这意味着tag仅适用于product一个products,但是您不希望按tagcountproducts tag对特定products标记的tag进行排序,或者可以搜索tag = zzz的所有taggings。等。

您需要product模型,has_many :taggings has_many :products, through: :taggings 模型和has_many :taggings has_many :tags, through: :taggings 模型。

<强> tag.rb

belongs_to :tag
belongs_to :product

<强> product.rb

{{1}}

<强> taggings.rb

{{1}}

通过此关系,您可以在将来按标签进行排序,搜索和计数。

完整教程:http://railscasts.com/episodes/382-tagging?view=asciicast 选择“从头开始”部分

p.s。建议不要删除标记,因为此标记可能会被其他产品使用。您可以稍后使用rake任务删除没有任何产品的标签。