ruby-on-rails – 类型转换ActiveRecord模型虚拟属性
发布时间:2020-12-16 20:28:15 所属栏目:百科 来源:网络整理
导读:我有一个模型有一些属性和一个虚拟属性. 该虚拟属性用于在创建表单中创建一个复选框. class Thing ActiveRecord::Base attr_accessor :foo attr_accessible :fooend 由于该字段是窗体中的复选框,因此foo属性将接收“0”或“1”作为值.由于以下代码,我希望它
我有一个模型有一些属性和一个虚拟属性.
该虚拟属性用于在创建表单中创建一个复选框. class Thing < ActiveRecord::Base attr_accessor :foo attr_accessible :foo end 由于该字段是窗体中的复选框,因此foo属性将接收“0”或“1”作为值.由于以下代码,我希望它是一个布尔值: class Thing < ActiveRecord::Base attr_accessor :foo attr_accessible :foo before_validation :set_default_bar private def set_default_bar self.bar = 'Hello' if foo end end 这里的问题是即使foo为“0”,条件也将成立.我想使用ActiveRecord类型的转换机制,但我发现只有这样做的是: class Thing < ActiveRecord::Base attr_reader :foo attr_accessible :foo before_validation :set_default_bar def foo=(value) @foo = ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value) end private def set_default_bar self.bar = 'Hello' if foo end end 但是我觉得这样做很脏.有没有更好的替代方法,而不重写转换方法? 谢谢 解决方法
原始帖子的解决方案看起来像是我最好的解决方案.
class Thing < ActiveRecord::Base attr_reader :foo def foo=(value) @foo = ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value) end end 如果你想清理一些东西,你可以随时创建一个帮助方法,它使用value_to_boolean来定义你的foo = writer方法. 我可能会使用一个名为bool_attr_accessor的方法来创建一个模块,以便您可以简化模型,使其如下所示: class Thing < ActiveRecord::Base bool_attr_accessor :foo end ActiveModel似乎应该为我们提供这样的东西,使虚拟属性更像“真实”(ActiveRecord-persisted)属性.只要您有一个从表单提交的布尔虚拟属性,此类型转换就是必不可少的. 也许我们应该提交一个补丁到Rails … (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |