Multiple model input in a single form

pada post ini saya akan menshare percobaan saya pada sebuah kasus, yaitu bagaimana caranya untuk melakukan multiple model input pada sebuah form, saya ingin memasukkan data pada transaction, dan juga transaction details, berdasarkan pilhan pada transaction type.

untuk schemanya dapat dilihat pada kode di bawah :

create_table "transaction_details", :force => true do |t|
    t.integer  "transaction_id"
    t.integer  "transaction_type_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "transaction_types", :force => true do |t|
    t.string   "transaction_type_name"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.float    "bonus"
  end

  create_table "transactions", :force => true do |t|
    t.date     "transaction_date"
    t.integer  "employee_id"
    t.float    "transaction_value"
    t.datetime "created_at"
    t.datetime "updated_at"
  end


maka metode yang akan saya gunakan yaitu :

  1. menambahkan inputan pada form new transaction, yaitu dropdown pemilihan detail transaction.
  2. menambahkan method pada model transaction_details untuk melakukan multiple input transaction_details, berdasarkan id transaction tertentu, dengan menggunakan loop.
  3. menggunakan model tersebut pada transactions controller.

berikut ini code nya, untuk view pada new transactions :

<% form_for(@transaction) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :transaction_date %><br />
<%= f.date_select :transaction_date %>
</p>
<p>
<%= f.label :transaction_type_id %><br />
<ul>
<% @transaction_type.each do |transaction| %>
<li> <%= check_box_tag "transaction_type_ids[]", transaction.id %> <%= transaction.transaction_type_name %> </li>
<% end %>
</ul>
</p>
<p>
<%= f.label :employee_id %><br />
<%= f.collection_select :employee_id, Employee.all , :id, :name %>
</p>
<p>
<%= f.label :transaction_value %><br />
<%= f.text_field :transaction_value %>
</p>
<p>
<%= f.submit 'Submit' %>
</p>
<% end %>

pada model nya menggunakan method sebagai berikut :

def self.multiple_input_transaction_type(transaction_id, params)
params.each do |transaction_type_id|
ti = TransactionDetail.new(:transaction_id => transaction_id, :transaction_type_id => transaction_type_id)
ti.save
end
end

dan pada controller untuk create nya :

def create
    @transaction = Transaction.new(params[:transaction])
    respond_to do |format|
      if @transaction.save
        TransactionDetail.multiple_input_transaction_type(@transaction.id, params[:transaction_type_ids])
        flash[:notice] = 'Transaction was successfully created.'
        format.html { redirect_to(@transaction) }
        format.xml  { render :xml => @transaction, :status => :created, :location => @transaction }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @transaction.errors, :status => :unprocessable_entity }
      end
    end
  end

Moga-moga bisa membantu.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s