Rails 4如何更新连接表有很多:通过关联

时间:2016-06-14 16:11:18

标签: ruby-on-rails ruby boolean has-many-through jointable

我正在尝试更新连接表中的连接表的布尔字段:通过rails中的关联但是值永远不会被插入并且布尔字段保持为0。

这是我的模特。

#image.rb
class Image < ActiveRecord::Base
    has_many :prodimgs
    has_many :products, through: :prodimgs
end

#product.rb
class Product < ActiveRecord::Base
    has_many :prodimgs
    has_many :images, through: :prodimgs

    accepts_nested_attributes_for :prodimgs
end

#prodimg.rb - this is the joining table
class Prodimg < ActiveRecord::Base
    belongs_to :products
    belongs_to :image

    accepts_nested_attributes_for :products
end

这是Prodimgs迁移。

class Cre t.boolean :is_main
      t.boolean :is_medium
      t.boolean :is_thumbnail
      t.integer :product_id
      t.integer :image_id

      t.timestamps null: false
    end
  end
end

我正在尝试从产品表单中的嵌套表单中更新is_main,is_medium和is_thumbnail字段。 这是表格。

<%= form_for(@product) do |f| %>

  ...

  <table class="table table-bordered table-hover">
    <thead>
      <tr>
        <th>image</th>
        <th>Main Image</th>
        <th>Medium Image</th>
        <th>Thumb</th>
      </tr>
    </thead>

    <tbody>
      <% @product.images.collect(&:image).each do |image| %>
        <tr>
          <td><%= image_tag image %></td>
          <td><%= f.radio_button :is_main, "false", :checked => false %></td>
          <td><%= f.radio_button :is_medium, "false", :checked => false %></td>
          <td><%= f.radio_button :is_thumbnail, "false", :checked => false %></td>
        </tr>
      <% end %>  
    </tbody>
  </table>

  ...


  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
<%= tinymce %>

因此,在我将图像上传并加入到产品后,我需要使用上面代码中显示的单选框更新加入的布尔字段,这将表明它是产品图库中的主要,中等或缩略图。 我已经尝试使用cocoon gem来实现同样的目的,但我仍然没有成功更新布尔字段。 以下是我的products_controller.rb文件中的product_params。

    def product_params
      params.require(:product).permit(:name, :shortdescription, :description, :sku, :status, :department_ids => [], :tag_ids => [], :image_ids => [], prodimgs_attributes: [:is_main, :is_medium, :is_thumbnail])
    end

关于如何解决这个问题的任何输入都会很棒! 感谢。

0 个答案:

没有答案