0

我需要将 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”。谁能帮我?谢谢!

4

1 回答 1

1

您可能需要添加一个虚拟属性来执行此操作。

例如,在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_privateis_private=(true_or_false)方法。

于 2013-06-27T03:08:27.430 回答