0

我的应用程序应该允许用户创建一个 status_update,它通过一个名为“previous_status_update”的方法从以前的 status_update 中提取信息。

在我看来,我有这个代码:

<span> <%= status_update.current_weight - status_update.previous_status_update.current_weight %></span> 

在我的模型中,我有相应的代码:

after_find :previous_status_update  

 def previous_status_update
 current_id = self.id
 previous_status_update = user.status_update.where( "created_at < ? ", self.created_at ).first
end  

在控制台中,以下命令按顺序完美运行:

user = User.find_by_id(3)
#<User id: 3, email: "example-3@r

status = user.status_update.first
#<StatusUpdate id: 73, created_at: "2012-09-13 23:08:35",......

status.previous_status_update
#<StatusUpdate id: 68, created_at: "2012-09-13 23:08:35".....

prev_stat = status.previous_status_update
prev_stat.current_weight 
=> 168

我猜问题是模型没有将活动记录对象放入可以像对象一样调用的实例变量中。相反,我只是有一个方法调用,它返回活动记录对象,但不是可以为属性调用的形式。

我认为我不能将整个对象存储在名为“previous_status_update”的数据库列中......


我认为此错误的另一种可能性是它指向示例数据中没有先前状态更新的第一个条目。因此,当程序试图得出一个值时,它只会返回 nil。我认为这就是错误所指的。

所以真的,我需要的是让rails在那个例外情况下冷静下来。

4

2 回答 2

0

您是否尝试过将控制器的状态更新作为符号:@status_update 移交?

我认为您会收到错误消息,因为视图无法对 status_update 执行某些操作,因为它的 nil 然后第一次访问

<span> <%= status_update.current_weight - ...

尝试在控制器中设置@status_update 并像这样修改您的视图

<span> <%= @status_update.current_weight - @status_update.previous_status_update.current_weight %></span> 
于 2012-09-16T22:13:25.177 回答
0

我解决这个问题的方法是返回第一个状态更新,它是不存在的“先前”状态更新的自身。

这解决了这个问题。

该方法如下所示:

 def previous_status_update
 previous_status_update = user.status_update.where( "created_at < ? ", self.created_at ).first   
 if previous_status_update == nil
   return self
 else
   previous_status_update
 end
end    
于 2012-09-17T03:25:00.823 回答