1
我需要一些关于Ruby on Rails模型中实例变量和访问器范围的帮助。Ruby On Rails - 模型属性和访问器范围
下面是我的模型(博客文章)的简化。 我已经删除了不相关的部分。当然它有一组验证,关联和自定义方法。
# Table name: articles
#
# author_url :string(255)
# display_date :datetime
class Article < ActiveRecord::Base
attr_accessible :author_url, :display_date
# callbacks
before_create :prepare_properties
# validations
VALID_URL_REGEX = /\Ahttps?:\/\/.+/i
validates :author_url, format: { with: VALID_URL_REGEX,
message: " can only use http:// or https:// schemes",
if: Proc.new { author_url.include?("://") } }
private
def prepare_properties
display_date ||= Time.now
author_url.prepend("http://") unless author_url =~ /\Ahttps?:\/\//i
end
end
现在:
author_url
首先用确保它始于要么http://
,https://
或任何一个验证检查。- 上创建对象,这应该发生:
- 如果
author_url
还没有(有效的)URL方案,http://
是默认前缀。 - 如果作者未指定display_date,则使用
Time.now
。
- 如果
的问题是,所述author_url
存取按预期方式工作,但display_date
一个被视为方法内作用域的局部变量。如果我用一个块而不是一个单独的方法使用回调,则会发生同样的情况。
使其工作的唯一方法是使用self.display_date
。
不过,我想知道为什么只发生一个属性,而不是其他发生。
哦。你是对的。非常感谢! – tompave 2013-04-30 17:28:54