2016-07-08 7 views
2

この設定を検討してください。私のBlogs#indexページで私は個々のブログレコードを更新することができます。ここでは、次のようになります。個々のフォームをラップするレールフォーム

<h1>Listing Blogs</h1> 

<div class="row"> 
    <div class="col-sm-4"><b>ID</b></div> 
    <div class="col-sm-4"><b>Title</b></div> 
    <div class="col-sm-4"><b>Actions</b></div> 
</div> 

<% @blogs.each do |blog| %> 
    <%= form_for(blog) do |f| %> 
    <div class="row"> 
     <div class="col-sm-4"> 
     <%= blog.id %> 
     </div> 
     <div class="col-sm-4"> 
     <%= f.label :title %> 
     <%= f.text_field :title %> 
     </div> 
     <div class="col-sm-4"> 
     <%= f.submit class: "btn btn-success" %> 
     </div> 
    </div> 
    <% end %> 
    <br> 
<% end %> 

<%= link_to 'New Blog', new_blog_path %> 

あまりにも悪くない:

blogs index

そして、ここではそのためのコードです。しかし、今私がしたいのは、これらのフォームをラップするフォームを追加することです。この形式は、選択したブログの各レコードのidをつかむ、あなたには、いくつかのコントローラにしたいブログのオブジェクトと、その後のポストを選択することができるようになる:

select_box

上記だけでモックアップです。私は実際にそれをする方法を知らない、それは問題です。

  • フォーム、
  • それとも包まのいずれかの形式を選択したblogsの投稿idsを包む

    アイデアは、ユーザーがフォームの2種類を提出することができるということですこれは、あなたが更新したい個々のブログレコードのためにちょうどBlogs#updateアクションに行くでしょう。

私は、私がこれをやって考えることができる唯一の方法はJavaScriptを使用して内部の他の形態のいない巣の形であることができるので:ためのボタンがAJAXリクエストにフォームを包ん

  • 電源を入れます
  • Do something with selected blogsボタンをクリックすると、関連するblog idは、アレイに追加し、それぞれにチェックチェックボックスのためのものであり、その後、パラメータとしてblog idsとともにget要求を呼び出すものを見るためにはJavaScriptを使用しています。

私は強くはJavaScriptを使用しないことを好むだろう。私はJavaScriptを使用しなくても同じレイアウトを維持することができ、そしてその私は包んフォームに投稿できるようになるだけでなく、そのラップフォーム内にある個々のいずれかの形式を投稿する方法はありますか?

答えて

0

私はそれを働かせました。私にとって重要なのは、フォームを入れ子にしないことでした。代わりに、私はちょうど2つのタイプのタイプを並べて並べます。。私はブートストラップのグリッドシステムを使ってこれを行いました。

outlining seperate forms

そして、ここのコードです。スタイリングにはブートストラップを使用しています。

<h1>Listing Blogs</h1> 

<div class="row"> 
    <div class="col-sm-3"> 
    <p>Select</p> 
     <%= form_tag do_something_blogs_path do %> 
     <% @blogs.each do |blog| %> 
      <div> 
      <%= check_box_tag "blog_ids[]", blog.id, false %> 
      </div><br> 
     <% end %> 
     <%= submit_tag "Do Something with Selection" %> 
     <% end %> 
    </div> 
    <div class="col-sm-9"> 
    <div class="row"> 
     <div class="col-sm-4"><p>ID</p></div> 
     <div class="col-sm-4"><p>Title</p></div> 
     <div class="col-sm-4"><p>Actions</p></div> 
    </div> 
    <div class="row"> 
     <% @blogs.each do |blog| %> 
     <%= form_for(blog) do |f| %> 
      <div class="col-sm-4"> 
      <%= blog.id %> 
      </div> 
      <div class="col-sm-4"> 
      <%= f.label :title %> 
      <%= f.text_field :title %> 
      </div> 
      <div class="col-sm-4"> 
      <%= f.submit class: "btn btn-success" %> 
      </div> 
     <% end %> 
     <br><br> 
     <% end %> 
    </div> 
    </div> 
</div> 

<%= link_to 'New Blog', new_blog_path %> 
0

おそらく最も簡単な答えは(何が必要に応じて)各項目の重複したフィールドを持つようになると、隠しに複製を設定します。あなたが気にするフィールドのいずれかが変更されたときには、非表示のフォームから非表示のフォームへデータをコピーする必要があります。この方法で、上記の下に2番目のフォームを作成することができます。これは、モックアップのようにボタンのように表示されます。

0

これはテストされていません。

#routes 
post "update_all" => "blogs#update_all" 

そして

#view 
<%= form_tag "/update_all", method: "post" do %> 
    <% @blogs.each do |blog| %> 
    <%= form_for @blog do |f| %> 
     <div class="row"> 
     <div class="col-sm-3"> 
      <%= select_tag "blog_ids[]", blog.id %> 
     </div> 
     <div class="col-sm-3"> 
      <%= blog.id %> 
     </div> 
     <div class="col-sm-3"> 
      <%= f.label :title %> 
      <%= f.text_field :title %> 
     </div> 
     <div class="col-sm-3"> 
      <%= f.submit "Update Blog", class: "btn btn-success" %> 
     </div> 
     </div> 
    <% end %> 
    <% end %> 
<%= submit_tag "Do something with selected blogs", class: "btn btn-primary" %> 

をと。

#controller 
def update 
    #your standard update 
end 

def update_all 
    #handle update all 
end 

サーバーログを調べて全体的にどのようなものが渡されているかを確認し、それを調べるための強力なカスタムパラメータ関数を作成します。

関連する問題