我需要将 check_box_tag 转换为 f.check_box,但我在这样做时遇到了麻烦。
我的复选框有
check_box_tag 'privacy', 1, (@idea.privacy=='private'), :id=>"Make Private"
因此,名称 = 'privacy',值 = 1,检查 (@idea.privacy=='private') 何时为真,并且 id 为“Make Private”。谁能帮我?谢谢!
我需要将 check_box_tag 转换为 f.check_box,但我在这样做时遇到了麻烦。
我的复选框有
check_box_tag 'privacy', 1, (@idea.privacy=='private'), :id=>"Make Private"
因此,名称 = 'privacy',值 = 1,检查 (@idea.privacy=='private') 何时为真,并且 id 为“Make Private”。谁能帮我?谢谢!
您可能需要添加一个虚拟属性来执行此操作。
例如,在app/models/idea.rb
:
class Idea < ActiveRecord::Base
attr_accessor :is_private
def is_private
privacy == 'private'
end
def is_private=(true_or_false)
self.privacy = true_or_false ? 'private' : 'public'
end
end
它可以以这样的形式使用:
<%= form_for(@idea) do |f| %>
<%= f.check_box :is_private %>
<%= f.submit %>
<% end %>
我建议遵循 Rails 的约定并使用生成的复选框 id: idea_is_private
。
如果你打算以不同的方式命名它,你可以这样做:
<%= f.check_box :is_private, :id => 'make-private' %>
ps 大多数人不会在 id 中使用空格。
pss 虚拟属性是如何工作的:
f.check_box :is_private
通知 Rails 应该使用哪些方法来读取和写入记录。在这种情况下,复选框的值为@idea.is_private
。而且,当检查 checobox 时,@idea.is_private = true
会执行类似的代码。
为了使它起作用,我们必须在模型中添加is_private
和is_private=(true_or_false)
方法。