2016-07-12 6 views
-1
<%= [email protected], :url => equipments_path, :method => :post do |f| %> 
    .... 
<% if @equipment.id.present? %> 
    <div class="actions"> 
    //TODO submit_tag to action Update 
    </div> 
<% else %> 
    <div class="actions"> 
     <%= submit_tag "Adicionar Equipamento" %> 
    </div> 
<% end %> 
<% end %> 

この例では、オブジェクトが存在する場合は最初のボタンがあり、存在しない場合は2番目のボタンがあります。 2番目のボタンはコントローラEquipment#Createに要求を送信します。最初のボタンでEquipments#Updateにリクエストを送信するにはどうすればよいですか?rails submit_tags to different actions

+0

<%= simple_form_for @equipment do | f | %>この行は、オブジェクトが新しいかどうかをチェックすることによって作成または更新のパスを自動的に処理します – user100693

答えて

0
<%= simple_form_for @equipment do |f| %> 
    <div class="actions"> 
    <%= submit_tag(@equipment.persisted? ? "Create Equipment" : "Update Equipment") %> 
    </div> 
<% end %> 

これは簡単な方法です。

通常、これらのラベルを翻訳するにはI18nを使用します。 (I18n for model-specific Rails submit button参照)

+0

私はあなたのソリューションを理解していますが、このフォームは異なるモデルからオブジェクトを受け取ります。パスは常に、createとequipment_pathを更新するequipments_pathと同じです。どうやってやるの ? – dijiri

+0

@dijiriこのようにequipment_pathが自動的に追加されます。 あるフォームを使用して別のモデルを送信する場合、何かがひどく間違っています。 私はあなたが何を意味すると思いますか:このフォームは、機器の作成と更新に使用されます。しかし、 'form_for @ equipment'と' resources:equipment '(あなたのルート上)では、これは正しいパスと正しい方法で自動的に生成されます。 – siegy22

+0

はい、このフォームは複数のモデル用です。機器コントローラは一般的ですが、モデルはテレビ、ハイファイ、コンピュータなどになります – dijiri