1

TaskというモデルのRails3.2.8アプリケーションがあります。私のタスクモデルには、「complete_date」という日時プロパティがあります。のビューでcomplete_dateを表示しようとすると。

<%= @task.complete_date.strftime('%b %e, %Y') %>

「nil:NilClassの未定義のメソッド`strftime'」というエラーが表示されます。ただし、complete_dateフィールドはnullではありません。次のクエリ。

mysql> select count(*) from tasks where complete_date is null;

0行を返します。次のコードを使用して、同じビューでcomplete_dateを取得できます...

<% @task.attributes.each_pair do |name, value| %>
    <% if name == "complete_date" %>
      <%= value.strftime('%b %e, %Y') %>
    <% end %>
<% end %>

これは完全に機能するため、問題はドット表記(@ task.complete_date)で属性にアクセスすることだけにあるようです。タスクモデルで、attr_accessibleおよびattr_accessorとして「complete_date」をリストしました。@ task.complete_dateでcomplete_dateフィールドを参照するときに、なぜ常にnilになるのか、何か考えはありますか?ありがとう。

4

1 に答える 1

2

を削除する必要がありattr_accessor :complete_dateます。attr_accessor2つのメソッド(#complete_date#complete_date=)を作成し、インスタンス変数@complete_date、つまりnilを使用するためです。これは、レコードの属性の値が入力されていないためです。これらの2つのメソッドは、ActiveRecord属性アクセサーメソッドをオーバーライドしました。

于 2012-11-15T11:25:10.633 に答える