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