1

すでにインターネット全体を検索しましたが、このフォームを機能させることができません。つまりね:

has_many :through join モデルで接続された 2 つのモデルがあります。

estoque.rb

class Estoque < ActiveRecord::Base
  has_many :mpm_ests
  has_many :ordem_de_servicos, :through => :mpm_ests, dependent: :destroy
end

ordem_de_servico.rb

class OrdemDeServico < ActiveRecord::Base
  has_many :mpm_ests, dependent: :destroy
  has_many :estoques, :through => :mpm_ests
  accepts_nested_attributes_for :mpm_ests
end

そして結合モデル mpm_est.rb

class MpmEst < ActiveRecord::Base
  belongs_to :ordem_de_servico
  belongs_to :estoque
end

私がやりたいことは、結合テーブルをセットアップしたので、quantidade (数量) と呼ばれる入れ子になった追加の text_field を使用して collection_check_boxes を作成することです。

結合テーブルの移行ファイル (mpm_est):

class CreateMpmEsts < ActiveRecord::Migration
  def change
    create_table :mpm_ests do |t|
    t.integer :ordem_de_servico_id
    t.integer :estoque_id
    t.string :quantidade
  end
    add_index :mpm_ests, :ordem_de_servico_id
    add_index :mpm_ests, :estoque_id
    add_index :mpm_ests, [:ordem_de_servico_id, :estoque_id], unique: true
  end
end

しかし、問題は、コントローラーとビューでこれを行う方法がわからないことです。このようなことを試しましたが、うまくいきませんでした。

ordem_de_servicos_controller.rb

def new
  @ordem_de_servico = OrdemDeServico.new
  @ordem_de_servico.mpm_ests.build
end

def edit
  @ordem_de_servico.mpm_servs.build
  @ordem_de_servico.mpm_ests.build
end

[...]

 def ordem_de_servico_params
      params.require(:ordem_de_servico).permit(:cliente_id, :veiculo, :placa, :mecanico_id, {:estoque_ids => []}, :quantidade, :prazo, :pago, :valor_pago, :historico_pgto, :status)
    end

そして私の ordem_de_servico _form ビューで:

<%= f.fields_for :mpm_ests do |ff| %>
      <%= ff.collection_check_boxes(:ordem_de_servico, :estoque_ids, Estoque.all, :id, :nome) %>
      <%= ff.text_field :quantidade %><br>
<% end %>

編集 1

私がやりたいことの基本的な考え方は次のようなものです:

<!DOCTYPE html>
<html>
<body>

<h1>Ordem De Servico (Service)</h1>

<label>Number<label>
<input type="text">

<label>Service<label>
<input type="text">

<label>Person<label>
<input type="text">

<h5>Inventory (estoque)</h5>
<form action="">
<input type="checkbox" name="vehicle" value="Bike">Iron   <label>Quantity<label><input type="text"><br>
<input type="checkbox" name="vehicle" value="Car">copper   <label>Quantity<label><input type="text"><br>
<br><button>Save Ordem de Servico (service)</button>
</form>

</body>
</html>

4

1 に答える 1

1

これが完全な答えだとは言いませんが、ネストされた属性と collection_check_boxes を使用して、選択したチェック ボックスを保存しようとしていると思います。基本的に estoque_ids の配列を送信します。その場合、以下のコードが機能し、それを参照してさらに変更できます。

移行 (型を estoque_ids の配列として指定)

class CreateMpmEsts < ActiveRecord::Migration
  def change
    create_table :mpm_ests do |t|
      t.integer :ordem_de_servico_id 
      t.string :quantidade
      t.text :estoque_ids, array: true, default: []

      t.timestamps null: false
    end
  end
end

フォーム (New Ordem De Servico)

<%= f.fields_for :mpm_ests do |ff| %> 
      <%= ff.collection_check_boxes(:estoque_ids, Estoque.all, :id, :name) do |b|
          b.label { b.check_box }
        end
        %>
      <%= ff.text_field :quantidade %><br>
<% end %>

コントローラー (必要に応じてパラメーターを許可)

def create
    @ordem_de_servico = OrdemDeServico.new(ordem_de_servico_params)

    respond_to do |format|
      if @ordem_de_servico.save
        format.html { redirect_to @ordem_de_servico, notice: 'Ordem de servico was successfully created.' }
        format.json { render :show, status: :created, location: @ordem_de_servico }
      else
        format.html { render :new }
        format.json { render json: @ordem_de_servico.errors, status: :unprocessable_entity }
      end
    end
  end
private
def ordem_de_servico_params
  params.require(:ordem_de_servico).permit! #permit params u need
end

編集1:

  <div class="field">
      <% Estoque.all.each_with_index do |es,index| %>
            <div>
                <%= check_box_tag "ordem_de_servico[mpm_ests_attributes][#{index}][estoque_id]", es.id%>
                <%= es.name %>
                <%= text_field_tag "ordem_de_servico[mpm_ests_attributes][#{index}][quantidade]", :quantidade %><br>
            </div>
        <% end %>  
  </div>
于 2015-09-16T18:51:21.773 に答える