0

ビューにオブジェクト @website_links の配列があり、それらを更新したいのですが、コントローラー アクションに送信すると、チェックされたフィールドのみのリストが取得されます。オブジェクト全体のリスト (チェックされているものとチェックされていないもの) を取得するにはどうすればよいですか? そして、更新アクション内でそれらを適切に更新するにはどうすればよいですか?

<%= form_tag(:controller => 'website_links', :action => 'update', method: "put") do %>
    <%- @website_links.each do |link| %>
       <%= link.link %> 
       <%=  check_box_tag "checked[]", 1, link.checked"  %>
    <% end %>
    <%= submit_tag "Update" %>
<% end %>
4

1 に答える 1

1

フォームおよび入力ヘルパーを ActiveRecord モデルと組み合わせて使用​​していません。代わりに、で終わるフォーム ヘルパーを使用して、ダムフォーム_tagを生成しています。

website_links は ActiveRecord モデルであると仮定します。

よりスマートなフォームを作成するには、これらすべての website_links の親オブジェクトを取得する必要がある場合があります。このように、これらすべての Web サイト リンクには、参照する共通の親があります。

この場合Website、親として機能するというモデルがあると仮定します。この Web サイトhas_many :website_linksともちろん WebsiteLink belongs_to :website

WebsiteURLwebsite/45/editが呼び出されたときにモデルがレンダリングされるフォームを作成しましょう。updateメソッド用に生成されたデフォルト コードを に残しますwebsite_controller

<%= form_for @website do |f| %>
  <%= f.input_field :website_name %>

  <%= f.fields_for :website_links do |subform| %>
    <%= subform.object.link_name %>
    <%= subform.check_box :checked %>
  <% end %>

  <%= f.submit %>
<% end %>

Websiteまた、次の行をモデルに追加します。

accepts_nested_attributes_for :website_links, allow_destroy: true

これにより、Web サイト モデルは関連する website_links のパラメーターを取得し、それらのリンクを更新できます。

このコードはテストしていないため、ニーズに合わない可能性があることに注意してください。おそらく、リンクも追加および削除する必要があります。このRailsCastにも、適切な説明がいくつかあります。

于 2013-09-29T10:14:40.427 に答える