1. ホーム
  2. html

[解決済み] Rails: form_for checkbox でチェックボックスがチェックされているかどうかを true または false に設定する

2022-02-17 20:02:54

質問

usersというモデルがあり、2つのブール型属性を持っています。 send_emailsend_text . 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 %>

そして、こちらは update アクションの user_controller

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 の場合にチェックされ、逆にフォームを送信したときにチェックされた状態が属性に影響します。残りのコードも問題ありません。