私のアプリは、ユーザーが「previous_status_update」と呼ばれるメソッドを介して以前の 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 が返されます。これがエラーの意味だと思います。
本当に、私が必要としているのは、レールがその例外で冷静になることです。