web-dev-qa-db-ja.com

レールでcheck_boxをチェックする方法は?

次のRailsフォームヘルパーを使用してチェックボックスを作成しました。

<%= check_box("tag", tag.id) %>

ただし、それらのいくつかをデフォルトでチェックする必要があります。 Railsドキュメンテーションはこれを行う方法を指定していません。方法はありますか?

31
user1779563

これにはcheck_boxによって直接サポートされる非常に簡単なソリューションがあります(少なくともRails 4、私は古いドキュメントをチェックしていませんでした)

<%= check_box("tag", tag.id, {checked: true}) %>

これにより、チェックボックスがチェックされます。もちろん、trueの代わりに、それぞれをチェックするかどうかを決定するロジックを配置します。

46
John Bachir

Check_boxをnewでチェックし、editで正しく入力する必要がある場合は、次を実行できます。

<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>

私が言ったように ここ

8
GEkk

Rails docsはそれをチェックする方法を述べており、オブジェクトに依存します。check_boxで使用するインスタンスオブジェクトがない場合、最良のオプションはcheck_box_tagを次のように使用することです。言及した場合は、読み進めてください。

リンクはこちら check_boxヘルパーのドキュメントへ。基本的にこれがどのように機能するかは、インスタンス変数を定義する必要があるということです。そのインスタンス変数には、整数またはブール値を返すメソッドが必要です。ドキュメントから:

このオブジェクトは、ローカルオブジェクトではなく、インスタンスオブジェクト(@object)でなければなりません。メソッドが整数を返すことを意図しており、その整数がゼロより大きい場合、チェックボックスがオンになります。

たとえば、有効なメソッドを持つビューに@tagインスタンスがあると仮定しましょう。次のスニペットにより、@ tagオブジェクトで有効になっている場合はチェックボックスがオンになり、偽の場合はオフになります。デフォルトで有効にするには、コントローラーでenabled属性をtrueに設定します。最後の2つの変数は、チェックボックスがオンまたはオフのときにフォームと共に送信する値です。

<%= check_box "tag", "enabled", {}, "1", "0" %>

多くの場合、フォームビルダーで使用されるcheck_boxヘルパーが表示されます。したがって、@ tagインスタンスにform_forが使用されている場合、次のスニペットを使用する可能性が高くなります。

<%= f.check_box :enabled %>
4
Dan Polites

check_box_tag の代わりに check_boxには、チェック済みであることを設定する方法があります。

2
user1779563

チェックを書く必要はありません:Rails> = 4.0の場合true

<%= check_box_tag "name", value, true %> # true or false
2
Govind shaw

これらすべてのソリューションの問題は、再送信時にparamsハッシュとうまく機能しないことです。そのため、現時点ではこのようなものを使用しています。

# ApplicationHelper
def resolve_boolean_parameter resource, attribute, options = {}
  default = options.delete(:default)
  return default unless params[:utf8]

  return params[resource][attribute] == "1"
end

そしてビューで:

<div><%= f.label :accepts_newsletter, "Receive Newsletters" %>
  <%= f.check_box :accepts_newsletter, :checked => resolve_boolean_parameter(:user, :accepts_newsletter, default: true)  %>
</div>
0
bbozo

ヘルパーに配置された新しい関数

def check_if_true(item)
  ActiveModel::Type::Boolean.new.cast(item)
end

あなたのビューで

<%= check_box("test", "active", {checked: check_if_true(@test.active) , :multiple => true, :style => "margin-left: 16px;"}, "true", "false") %>
0
FlyingV

check_box_tagを使用して、trueに設定して、既にチェックされているようにすることができます。詳細はこちら: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

0
Marcelo Alves