ruby 如何使用复选框以嵌套形式修改模型的每个对象的值

rhfm7lfc  于 2023-03-01  发布在  Ruby
关注(0)|答案(1)|浏览(98)

我是编程新手,我有一个关于用Ruby on Rails制作表单的问题。我正在制作一个数据库,用于存储产品的单位。这些单位在创建时最初位于storage。这个位置存储在一个列Unit model中。然后我有一个模型Store和一个模型Remission。

class Unit < ActiveRecord::Base
  belongs_to :store
  belongs_to :remission
  attr_accessor :into_remission
end

class Remission < ActiveRecord::Base
  belongs_to :store
  has_many :units
  accepts_nested_attributes_for :units
end

class Store < ActiveRecord::Base
  has_many :units
  has_many :remissions
end

商店有_many:remissions和Remission有_many:units。这个想法是,当我把一些单位在商店出售时,我必须创建一个remissions。这个remissions是我给商店的产品列表,这样我们都可以有一个商店中哪些产品的参考。所以我有一个表单来创建一个remissions,您可以在其中选择商店,将更改remissions的store_id(参考)。我还想从这个相同的表单中选择将参加这个新的remissions的单位,更改每个单位的remissions_id(参考)。为此,我在单位模型中做了一个attar_accessor:into_remissions,这样我就可以在每个单位中将其更改为true,并通过复选框结束remissions。我有很多问题,下面是我的表单代码:

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@remission) do |f| %>
      <%= render 'shared/error_messages_remissions' %>
#Here you select the store that would own the remission and the products
      <div class="field">
        <%= f.label :store_id, "Producto" %> <br/>
        <%= f.collection_select :store_id, @stores.order(:name), :id, :name, prompt: "Select Store" %>
      </div>
#Here its a dynamic table that display all the products in storage
        <table id="products" class="table table-striped table-bordered" cellspacing="0" width="100%">
          <thead>
            <tr>
              <th>Product Name</th>
              <th>Remission</th>
            </tr>
          </thead>
          <tbody>
      #HERE I WANT TO MAKE A CHECK_BOX THAT CHANGES THE INTO_REMISSION VALUE FROM EACH UNIT. SO IT MARKS THE UNITS THAT WOULD TAKE PART IN THE REMISSION
          <%= f.fields_for :units do |ff| %>
            <% @units.each do |unit| %>
              <% unless unit.sold %>
                <tr>
                  <td><%= unit.product.name %></td>
                  <td>
                      <%= ff.label :into_remission, "Nombre de tu Marca:" %>
                      <%= ff.check_box :into_remission%>
                  </td>
                </tr>
                <% end %>
            <% end %>
          <% end %>
          </tbody>
        </table>
        <%= f.submit "Submit", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

不用说,他的复选框现在显示也不工作。我不知道如何使这项工作,任何建议将是受欢迎的,因为我是新的轨道和编程。谢谢

voj3qocg

voj3qocg1#

尝试更改此设置:

<%= f.fields_for :units do |ff| %>
  <% @units.each do |unit| %>
    <% unless unit.sold %>
      <tr>
        <td><%= unit.product.name %></td>
        <td>
            <%= ff.label :into_remission, "Nombre de tu Marca:" %>
            <%= ff.check_box :into_remission%>
        </td>
      </tr>
      <% end %>
  <% end %>
<% end %>

变成这样:

<% @units.each do |unit| %>
  <%= f.fields_for :units, unit do |ff| %>
    <% unless unit.sold %>
      <tr>
        <td><%= unit.product.name %></td>
        <td>
            <%= ff.label :into_remission, "Nombre de tu Marca:" %>
            <%= ff.check_box :into_remission%>
        </td>
      </tr>
      <% end %>
  <% end %>
<% end %>

我认为你应该先遍历单元,然后将每个单元分别传递到的字段中,这样就可以解决显示问题。

相关问题