ruby-on-rails 使用Rails Simple_form预选复选框

bsxbgnwa  于 2022-12-27  发布在  Ruby
关注(0)|答案(8)|浏览(148)

我在Rails3中使用了Simple_Form,它非常棒。我有一个简单的问题。如果类型是boolean,我可以在后台使用f.input创建一个复选框。但是,我希望它被预先选择为true。
有没有办法通过视图来实现这一点?

e4eetjau

e4eetjau1#

如果你不想,或者不能更新你的迁移来做'PerfectlyNormal'的答案,那么你可以添加以下到你的f.input的末尾:

:input_html => { :checked => true }

因此,它将变成:

= f.input :some_flag, :input_html => { :checked => true }
g0czyy6m

g0czyy6m2#

最好的方法是在模型中设置默认值,如下所示

create_table :my_table do |t|
  ...
  t.boolean :my_boolean, :default => true
  ...
end

simple_form将在其上拾取,并将复选框设置为默认选中。
一种更简单的方法是按照Dave所说的那样做,并将值强制为1,但是如果验证失败,您再次显示表单时,它仍然会被选中,而不管表单提交时的外观如何。

ippsafx7

ippsafx73#

对我来说,只选中一个复选框,其值为**“无”**

<%= f.input :notify, label: "Notification", as: :check_boxes, collection: ["None", "Daily", "Weekly", "Monthly", "Quarterly", "Yearly"], :item_wrapper_class => 'inline', :checked => ["None", true] %>
pkmbmrz7

pkmbmrz74#

我只是偶然发现了这篇文章,对我有效的方法与最新的答案类似--但更短。只需使用所需的设置初始化对象:

def new
  Object.new(my_boolean: true)
end
uqzxnwby

uqzxnwby5#

在我看来,实现这一点的方法是在控制器中设置属性的值:
@一些对象。一些标志= 1

6pp0gazn

6pp0gazn6#

这应该行得通:

= f.input :some_flag, :input_html => { :value => '1' }
91zkwejq

91zkwejq7#

如果您执行以下操作,如评分最高的答案(如@PerfectlyNormal所示),您实际上是在硬编码 * 每个页面加载 * 的状态:

= f.input :some_flag, :input_html => { :checked => true } # don't do this

如果您使用的是Rails样式的服务器验证,则会产生意外的副作用,即在验证失败时重置用户的选择。
如果默认值是静态的,则在模型中默认它是理想的。但是在某些情况下,默认值是由某些业务规则驱动的,因此需要在运行时设置它。例如,在我的情况下,我希望将复选框默认为true,但仅适用于某些类型的组织。
您需要的是只有在没有设置 * 的情况下才使用默认值 *,否则使用用户选择的值。

- is_checked = @org.is_special.nil? ? true : @org.is_special?
= f.input :some_flag, :input_html => { :checked => is_checked }
ni65a41a

ni65a41a8#

对于Rails 6+,您可以简单地执行以下操作:

<%= f.check_box :remember_me,  checked: true %>

相关问题