我正在使用rails,我想让它默认设置为false。有谁知道如何做到这一点,并能够解释它在简单的条款给我吗?
rbpvctlc1#
class Like def after_initialize self.politics = false end end i = Like.new i.politics #=> false
字符串
class Like attr_accessor_with_default :politics, false end i = Like.new i.politics #=> false
型
class Like attr_writer :politics def politics @politics || false end end i = Like.new i.politics #=> false
ac1kyiln2#
如果定义了attr_accessor,默认值为nil。您可以向其写入,从而使其成为!nil
attr_accessor
nil
!nil
des4xlb03#
你可以使用virtus gem:https://github.com/solnic/virtus来自README:Virtus允许你在类、模块或类示例上定义属性,其中包含关于类型、读/写方法可见性和强制行为的可选信息。它支持大量的强制和嵌入对象和集合的高级Map。它特别支持默认值。
wgxvkvu94#
class Song < ActiveRecord::Base def initialize(*args) super(*args) return unless self.new_record? self.play_count ||= 0 end end
字符串在我看来,我认为这个答案是好的。虽然我们覆盖了initialize()方法,但由于super是在该方法的第一行调用的,它不会改变基类initialize()方法的任何内容,相反,这是面向对象编程的一个关键特性,我们可以覆盖它,并在对象初始化时添加更多功能。从数据库阅读对象时也不会跳过初始化器,因为super是在函数的第一行调用的。
initialize()
super
ix0qys7i5#
我在ActiveRecord中使用了这个表单:
5jdjgkvh6#
这不是在attr_accessor中完成的,而是在迁移中完成的。因此。。您可以执行迁移(1)第一个月(2)在def self.up中添加def self.up change_column :your_table, :politics, :boolean, :default => 0 end个底线是默认属性在迁移中设置。希望这对你有帮助!编辑:还有一些类似的问题也得到了很好的回答:例如here和here
def self.up
def self.up change_column :your_table, :politics, :boolean, :default => 0 end
lg40wkob7#
attr_accessor是一个虚拟变量,它不存储在数据库中,只能在应用程序中不保存或更新活动记录时使用。您可以在模型中定义attr_accessor,如
class Contact < ActiveRecord::Base attr_accessor :virtual_variable end
字符串并以如下形式使用:
<div class="field"> <%= f.label :virtual %><br> <%= f.text_field :virtual %> </div>
型你可以在控制器参数中找到这些变量值。
7条答案
按热度按时间rbpvctlc1#
Rails 4+
字符串
Rails 3.1及以下版本
型
纯Ruby
型
ac1kyiln2#
如果定义了
attr_accessor
,默认值为nil
。您可以向其写入,从而使其成为!nil
des4xlb03#
你可以使用virtus gem:
https://github.com/solnic/virtus
来自README:
Virtus允许你在类、模块或类示例上定义属性,其中包含关于类型、读/写方法可见性和强制行为的可选信息。它支持大量的强制和嵌入对象和集合的高级Map。
它特别支持默认值。
wgxvkvu94#
字符串
在我看来,我认为这个答案是好的。虽然我们覆盖了
initialize()
方法,但由于super是在该方法的第一行调用的,它不会改变基类initialize()
方法的任何内容,相反,这是面向对象编程的一个关键特性,我们可以覆盖它,并在对象初始化时添加更多功能。从数据库阅读对象时也不会跳过初始化器,因为super
是在函数的第一行调用的。ix0qys7i5#
我在ActiveRecord中使用了这个表单:
字符串
5jdjgkvh6#
这不是在attr_accessor中完成的,而是在迁移中完成的。
因此。。您可以执行迁移
(1)第一个月
(2)在
def self.up
中添加def self.up change_column :your_table, :politics, :boolean, :default => 0 end
个底线是默认属性在迁移中设置。
希望这对你有帮助!
编辑:
还有一些类似的问题也得到了很好的回答:
例如here和here
lg40wkob7#
attr_accessor是一个虚拟变量,它不存储在数据库中,只能在应用程序中不保存或更新活动记录时使用。您可以在模型中定义attr_accessor,如
字符串
并以如下形式使用:
型
你可以在控制器参数中找到这些变量值。