2011-11-14 15 views
1

私は記事モデルを持っています。データベーススキーマには、「タイトル」を含むいくつかの列があります。私はmethod_missing提供ゲッターの代わりに自分のゲッターを提供しようとしています。現在のところ私は単純に試しています:デフォルトの属性アクセサーが上書きされないのはなぜですか?

class Article < ActiveRecord::Base 
    def title 
    "blah" 
    end 
end 

しかし、私がビューをリロードすると、タイトルフィールドは引き続きデータベースから供給されます。 (私のサーバ環境は開発されており、Rails 3.1.0に乗っています)。

+1

属性を使用しているビューの行を含めることはできますか?それはうまくいくように見えます。 – Emily

+2

恐らく疑問な質問ですが、ローカル開発サーバーを停止して再起動しましたか? – jerhinesmith

+0

@エミリー、それは動作するように見えることに同意する! = - )ビューは次のようになります。

<%= f.label :title %>
<%= f.text_area :title, :rows => 2 %>

答えて

2

入力ヘルパーは 'before_type_cast'バリアントがある場合は通常アクセサーを使用しません。したがって、あなたのケースではtitle_before_type_castにアクセスしています。

これも定義するか、別のメソッド名を選択します。私は後者に助言するでしょう。なぜなら、この複雑さがなくても、アクセサをオーバーライドするのは混乱するからです。 ActiveRecordと戦わないでください、あなたは勝てません。

+0

私はちょうど新しい方法の名前のルート(私は戦いのアドバイスをありがとう)に行くつもりですが、私はまだこの問題について不思議です。私は 'title_before_type_cast'を' title'だけでなく 'title_before_type_cast'の代わりに定義しようとしましたが、いずれの場合もヘルパーに" blah "は与えられませんでした。なぜそれがうまくいかなかったと思いますか?ありがとう。 –

+1

それも私を混乱させる。ソースを正しく解釈していればうまくいくはずです:https://github.com/rails/rails/blob/75366cb82dc6fa4b3dada2a450dda18496f3eddd/actionpack/lib/action_view/helpers/form_helper.rb#L1122 – iain

関連する問題