0

我确定我只是做错了,有人可以指出我正确的方向吗?

我需要将 Effective_date 的值设置为修改后的格式日期

effective_date是请求的一个属性

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 (不是数据库中的列)设置有效日期(数据库中的列)的值。我正在使用 format_date 方法从 format_date 转换日期并将其存储到有效日期。如果这还不够信息,请告诉我。我不确定还要添加什么。

4

2 回答 2

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=方法。它假定局部变量。

于 2012-05-01T22:11:27.573 回答
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)的局部变量也不好,这里没有错误,但有点误导。

更新:您可以在这里看到更多关于虚拟属性:

http://railscasts.com/episodes/16-virtual-attributes?view=asciicast

http://railscasts.com/episodes/167-more-on-virtual-attributes

于 2012-05-01T20:25:41.913 回答