0

チェックボックス付きのフォームがあります。フォームはモデルにマップされます。チェックボックスがクリックされておらず、このフィールドに何も送信されていない場合の問題を防ぐためのレールのドキュメントによると、レールはチェックボックスの直前に値が 0 の非表示フィールドを生成します。そのとおりです。

正しくないのは、チェックボックスをクリックしてフォームを送信した後、投稿リクエストで、最初に値 1 が送信され、次に値 0 (非表示フィールドから) が送信されることがわかります。この結果、チェックボックスは常に値 0。

パラメータ抽出はクエリ文字列で繰り返されるキーの最後の出現を取得すると述べている場合、ドキュメントは正しいですが、ポストリクエストの順序は正しくありません????

Rails 3.2.11を使用しています。

見る

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
  <%= devise_error_messages! %>
    <p><%= f.label :name %><br />
    <%= f.text_field :name %></p>
...
    <div><%= f.label :send_dayplan_info %><br />
    <%= f.check_box :send_dayplan_info %>
    <div><%= f.submit "Update" %></div>
<% end %>

コントローラ ...

def update  
    ...  
    if resource.update_with_password(params[resource_name])  
      ....  
    end  
end  

概要
params[resource_name] をデバッグして評価すると、send_dayplan_info フィールドの値が常に 0 になります。
チェックボックスをクリックすると、firebug の投稿リクエストに次の値が含まれていることがわかります:
user[send_dayplan_info]=1
user[send_dayplan_info]=0

チェックボックスをクリックしないと、firebug の投稿リクエストに次の値が含まれていることがわかります:
user[send_dayplan_info]=0

以下は、クリックされたチェックボックスのフォームデータです
utf8:✓<br> _method:put
Authenticity_token:....
user[name]:....
user[send_dayplan_info]:1
user[send_dayplan_info]:0

生成された html のソース コードは次のとおり
です。

<div><label for="user_send_dayplan_info">Send dayplan info</label><br />  
<input name="user[send_dayplan_info]" type="hidden" value="0" /><input id="user_send_dayplan_info" name="user[send_dayplan_info]" type="checkbox" value="1" />  
<div><input name="commit" type="submit" value="Update" /></div>
4

0 に答える 0