ruby-on-rails – 如何使虚拟属性成为布尔字段

我正在尝试获取一个布尔值的虚拟属性.在这个例子中,让我们调用虚拟布尔字段children:

车型/ parent.rb

Parent
 attr_accessible :children
 attr_accessor :children
 validates_inclusion_of :children,:in => [true,false]

 def self.children=(boolean)
 end

end

父母/ new.html.erb

<%= form_for @parent do |f| %>
  <%= f.check_Box :children %>
  <%= f.submit "Create" %>
<% end %>

现在,当我尝试使用它时,(创建一个父)它给了我错误

Children is not included in the list

当验证出现时.

我怎么写这个?

解决方法

您从浏览器获得的参数是一个字符串(根据您对其他答案的评论:«而不是真和假,但使用0和1.“parent”=> {“children”=>“1”} »).您的验证检查它是否是布尔值.

我建议以下解决方案:

首先,删除你的def self.children =()方法,它在你当前的实现中什么都不做(它是一个方法,从不调用).

然后,实现一个自定义访问器,将String参数转换为布尔值:

class Parent
  attr_reader :children

  def children=(string_value)
    @children = (string_value == '1')
  end

  validates_inclusion_of :children,false]
end

有了它,您的原始验证应该工作得很好.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...