我有一个控制器:
class PortTestingController < ApplicationController
def index
@ports = {"80" => false, "443" => false, "2195" => true, "28009" => false}
end
end
这就是我的看法:
- @ports.each_with_index do |(key,value), index|
- fields_for "ports[#{index}]", port do |f|
f.checkbox "#{key}" "#{key}"
=key
我一直在查看check_box的文档:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box
我不知道该为我的复选框写什么。方法是什么?我可以传递哪些选项?什么是检查值和未检查值?
答案 0 :(得分:1)
这是ActionView
的一个令人困惑的方面。
由于您正在呼叫f.check_box
,而不仅仅是check_box
(至少您将在修复错字时),您实际调用的函数就是这个:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-check_box
但是,FormBuilder
方法只是将f
表示的对象作为第一个参数传递给FormHelper
。因此,您可以将其视为f.check_box ...
等同于check_box f.object ...
method
是您要设置的ActionView
属性。
可以传递各种options
,但我发现我通常会通过{}
如果选中该复选框,则checked
值是您要传递的值。默认情况下,它将为1.同样,如果取消选中该复选框,则表单会传递unchecked
。有时我发现我想要反转复选框的极性,并且我想跟踪未选中的复选框,因此我将checked
设置为0并将unchecked
设置为1.
现在到了更重要的一点。所有这些ActionView
方法都适用于您目前没有的ActiveRecord
模型。您的控制器未将@ports设置为从ActiveRecord::Base
派生的值。我想你应该多读一些。