是否可以在rails中向对象添加变量?

时间:2014-11-15 08:04:01

标签: ruby-on-rails ruby

由于像这样的一些小问题,我真的很沮丧。

我有一个名为timelines的模型。在它是一个日期时间列,但我传递数据的javascript只期望一个日期。所以我想在将模型对象传递给视图之前添加一个新字符串。这似乎不可能。

首先,我从数据库中收集数据并将其放入实例变量中:

@timeline = Timeline.where(token: params[:token]).first

然后我尝试添加这样的变量:

@timeline.birthday = "1/1/2000"

我收到错误消息:

undefined method birthday= for #<Timeline:0x00000105add0d0>

我猜这是因为birthday不是我数据库中的列。我知道它不是,我不在乎它不在我的数据库中。我只想添加到我的变量上。这可能吗?

2 个答案:

答案 0 :(得分:2)

您需要添加访问者方法才能获得/设置生日。但不会坚持下去。

class Timeline
  attr_accessor :birthday
end

替代解决方案

您似乎遇到的潜在问题(“javascript期待别的东西”)可以通过几种方式解决。例如Presenter模式。或者使用ActiveModel Serializers。

这将允许您保持模型不变,并在渲染时将数据转换为客户端期望的格式。

答案 1 :(得分:0)

您可以使用以下命令将原始日期时间列转换为日期:

your_column_name.strftime("%d/%m/%y")