2016-08-02 7 views
0

Я новичок в программировании, и у меня есть вопрос, связанный с созданием формы в рубине в рельсах. Я создаю базу данных для хранения единиц продуктов. Эти единицы при создании первоначально располагаются на складе. Это место хранится в колонке 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 

Магазин has_many: ремиссии и ремиссия has_many: ед. Идея состоит в том, что когда я кладу несколько единиц для продажи в магазине, я должен создать ремиссию. Эта ремиссия - это список продуктов, которые я дал магазину, поэтому мы оба можем иметь ссылку на то, какие продукты находятся в магазине. Таким образом, у меня есть форма для создания ремиссии, в которой вы можете выбрать хранилище, которое изменит store_id (ссылку) ремиссии. Я также хочу выбрать из этой же формы единицы, которые будут принимать участие в этой новой ремиссии, изменяя relission_id (ссылку) от каждого блока. Для этого я сделал attar_accessor: in_remissions в модели Unit, чтобы я мог изменить это на true в каждой единице, которая закончила бы ремиссию с помощью флажка. Я имея много проблем, делающих эту работу, вот код моей формы:

<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> 

Излишне говорить, что он check_box его теперь показывает и не работают. Я не уверен, как сделать эту работу и любые советы приветствуются, поскольку я новичок в рельсах и программировании. Благодаря

ответ

1

Попробуйте изменить это:

<%= 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 %> 

Я думаю, вы должны сначала перебрать единиц и передать каждую единицу отдельно в поле для. Это должно решить проблему.