2つのブール属性send_email
とsend_text
を持つusersというモデルがあります。 Userモデルを編集するフォームがあり、ボックスがオン/オフされているかどうかに応じて、それらの属性をtrue/falseに設定する必要があります。こちらが私のフォームです
<%= form_for(@user) do |f| %>
<div class="field">
<%= f.label :email %> <br />
<%= f.text_area :email %> <br />
</div>
<div class="field">
<%= f.label :cell %> <br />
<%= f.text_area :cell %> <br />
</div>
<div class="field">
<%= f.label "Get Email" %> <br />
<%= f.check_box :send_email, {}, true, false %> <br />
</div>
<div class="field">
<%= f.label "Get Text" %> <br />
<%= f.check_box :send_text, {}, true, false %> <br />
</div>
<div class="actions">
<%= f.submit "Submit", class: "button small radius" %>
<%= link_to "go back", @user, class: "button small radius secondary" %>
</div>
<% end %>
そして、これはuser_controller
のupdate
アクションです
def update
@user = User.find(params[:id])
@user.update_attributes(params[:user])
redirect_to @user
end
フォームと更新は完全に機能するように見えますが、send_emailまたはsend_textボックスをオンにしてこのフォームを送信しても、ユーザーモデル(send_email、send_text)の属性はfalseに変更されません。
フォームがオブジェクトを操作しているときにRailsがこれを行います。タグから余分なものはすべてそのままにしておきます。
<div class="field">
<%= f.label "Get Email" %> <br />
<%= f.check_box :send_email %> <br />
</div>
そして、すべてが期待どおりに動作し始めるはずです。属性がtrueの場合、チェックボックスがオンになり、逆の場合は、フォームを送信するときにチェックされた状態が属性に影響します。コードの残りは問題ありません。
フォームおよびデータベースの更新に関する詳細情報
確かに、最後の答えは正しいです。form_for構文を使用するだけで十分です。Railsは、unchecked:false/checked:trueの関連付けを行います。
<div class="field"> <%= f.label "Get Email" %> <br /> <%= f.check_box :send_email %> <br /> </div>
その構文でも同じ問題がありました。事実は、サーバーのコンソールから返されたUnpermitted parameter: checkbox_value
:params
に入れるために必須/許可されたパラメーターを更新することを忘れないでください!そして私の場合:
# ***_controller.rb
private
def operator_params
params.require(:operator).permit(:name, :website, :checkbox_value, :global)
end
同じ問題がありました。
<% @batches.each do |batch| %>
<div class="name_list<%=cycle('odd', 'even')%>"><li>
<label><%= check_box_tag "send_sms[batch_ids][]", batch.id,false,:class=>'right' %>
<div class="att_list_names"> <%= batch.full_name %></div> </label>
</li> </div>
<% end %>