2010-11-07 57 views
26

我在使用Simple_Form与Rails 3,它很棒。我有一个简单的问题。如果类型是幕后布尔值,我可以使用f.input创建一个复选框。但是,我希望它被预选为真实。使用Rails 3预选复选框Simple_form

有没有办法通过视图做到这一点?

回答

17

最好的办法是设置在你的模型中的默认值,像

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

simple_form会挑上,并设置复选框默认选中。

更简单的方法就是像Dave说的那样做,只需强制将值设为1,但如果验证失败,并且您再次显示该表单,则仍然会检查该表单,而不管表单在表单显示时的样子已提交。

+3

实际上它可以工作,但它涉及更多的数据库默认值。我认为这里最好的选择是只在客户端通过以下方式选择值:input_html => {:checked => true} – coorasse 2014-03-10 17:09:29

+0

这是一个更好的答案。 – allesklar 2014-08-12 09:48:50

2

这应该工作:

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

-1因为真的会搞乱任何数据库表格编辑,所以这真的不是好建议。 – 2011-07-19 16:01:50

+1

真的吗?老兄问如何在视图中设置它。它从哪里说他将要编辑它? – 2011-08-25 01:00:48

+2

Hi Dave,在rails中,视图代表浏览器中显示的前端html。当Drew说“如果这个类型是幕后布尔类型”,这似乎暗示这是违背活动记录模型的,并且对任何活动记录模型使用复选框似乎意味着他希望编辑/更新属性。我会避免低估你,因为这看起来有点小气。 – 2011-08-27 19:08:49

1

在我看来,轨办法做到这一点是设置在控制器属性的值:

@ some_object.some_flag = 1

+1

我想大多数人会说这个逻辑属于模型。 – steel 2014-10-17 17:33:55

+0

我会说,这取决于。控制器中定义了强参数。因此,您的标志的值可能取决于当前的上下文。 ? – ndemoreau 2014-10-20 07:39:43

89

如果你不想,或无法更新您的迁移做“PerfectlyNormal的答案,那么你可以添加以下到您的f.input结束:

:input_html => { :checked => true } 

所以,它会成为:

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

希望有所帮助!

+1

如果表单的值不存在于数据库中,这是最好的解决方案... – 2013-09-20 12:25:21

+0

这应该是被接受的答案。 – allesklar 2014-08-12 09:49:16

+0

这是正确的答案。 – zx1986 2016-12-30 15:53:25

7

它的工作对我来说这只检查一个复选框“无”

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

我只是绊了这篇文章,什么工作对我来说是类似于最新的应答值 - 但短。刚刚初始化对象与所希望的设置:

def new 
    Object.new(my_boolean: true) 
end