我确信我只是做错了,有人能指出我正确的方向吗?
我需要将effective_date的值设置为修改后的格式日期
effective_date
是Request
class Request < ActiveRecord::Base
def format_date=(format_date)
date_a = format_date.split("/")
month, day, year = date_a
effective_date = Date.parse("#{year}-#{month}-#{day}")
end
def format_date
effective_date
end
end
Request.create(format_date: "04/21/2012")
未将值设置为effect_date
编辑:我想这没有意义,所以我会尝试更好地解释它:
我需要从format_date(不是数据库中的列)设置effective_date(数据库中的列)的值。我使用format_date方法从format_date转换日期并将其存储到effective_date。如果这还不够,请告诉我。我不知道还有什么要补充的。
答案 0 :(得分:2)
如果effective_date
是数据库中的列名,则更改就像
def format_date=(format_date)
date_a = format_date.split("/")
month, day, year = date_a
self.effective_date = Date.parse("#{year}-#{month}-#{day}")
end
唯一的变化是effective_date =
到self.effective_date =
。如果不在其中添加self
,则解释器无法知道您是要设置名为effective_date
的局部变量还是调用effective_date=
方法。它假设局部变量。
答案 1 :(得分:1)
如果effective_date
是属性但不在表中,那么我认为你需要实例变量。
class Request < AR::Base
...
def format_date=(f_date)
...
@effective_date = Date.parse("#{year}-#{month}-#{day}")
end
def format_date
@effective_date
end
end
另外,使用名称作为方法名称(format_date)的局部变量并不好,这里没有错,但它有点误导。
更新:您可以在此处查看更多aboute虚拟属性:
http://railscasts.com/episodes/16-virtual-attributes?view=asciicast
http://railscasts.com/episodes/167-more-on-virtual-attributes