【问题标题】:Rails create and destroy nested attributes on update model formRails 在更新模型表单上创建和销毁嵌套属性
【发布时间】:2013-07-31 13:33:50
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails forms model nested


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您如何将具有相同名称的标签添加到另一个产品?

      我认为taggings 的数据库架构有误,现在您在标签table 中使用product_id,这意味着tag 将仅适用于一个product,但不要'您想通过tagcountproducts 进行排序,有多少products 被特定tag 标记,或者可以搜索所有products,其中tag 是= zzz。等等。

      您将需要 tag 模型、taggings 模型和 product 模型,您已经拥有。

      tag.rb

      has_many :taggings
      has_many :products, through: :taggings
      

      product.rb

      has_many :taggings
      has_many :tags, through: :taggings
      

      taggings.rb

      belongs_to :tag
      belongs_to :product
      

      通过这种关系,您将来可以按标签进行排序、搜索和计数..

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2013-08-20
      相关资源
      最近更新 更多