1

仮想属性を持つモデルがあります:

attr_accessible :published_at

def published_at_text
  I18n.localize(published_at, format: :long_no_day_with_seconds) if published_at
end

def published_at_text=(text)
  self.published_at = Chronic.parse(text)
end

これは単体テストでは正常に機能しますが、ビューでpublished_at_textフィールドが変更された場合は保存されません。attr_accessible :published_at_textを使用してsetterメソッドに追加しようとしましpublished_at_will_change!たが、これを機能させることができません。

development.log、published_at_textの変更された値が渡されていることを示していますが、セッターにRails.loggerへの呼び出しを追加すると、呼び出されていないことを示しているようです。

ここで何が欠けていますか?

4

2 に答える 2

0

発見: 仮想属性のフィールドが記事の一部として返されていなかったため、params ハッシュに表示されていませんでした。

これを置き換える:

<%= text_field_tag 'article_published_at_text', @article.published_at_text, class: 'text_date show_seconds' %>

これとともに:

<%= text_field_tag 'article_published_at_text', @article.published_at_text, name: 'article[published_at_text]', class: 'text_date show_seconds' %>

問題を修正しました。

于 2012-10-25T10:01:48.627 に答える
0

まあ、params ハッシュを使用してオブジェクトを作成したコントローラー メソッドを提供していませんが、推測はできます。

コントローラーに渡されたパラメーターを使用して、セッターを明示的に呼び出す必要があります。

次に、モデルで値が更新されるかどうかを確認します。

于 2012-10-24T16:26:57.990 に答える