1

Post というモデルを持つ標準の Rails 2.3.5 アプリがあります。Post には url という属性があり、次の getter が定義されています。

def url
  p = 'http://'
  u = self[:url]
  u.starts_with?(p) ? u : "#{p}#{u}"
end

ロードするscript/consolePost.first.url、目的の結果が得られます (たとえば、属性の true 値が foo.com の場合、http://foo.com が返されます)

ただし、form_forブロックがあり、次のようなform.text_field :urlことをすると、http:// が前に付いた URL は返されません。むしろ、単純に foo.com を返します。

form_for は ActiveRecord モデルの属性にどのようにアクセスしますか? オーバーロードされたゲッターをバイパスしているようです。

4

2 に答える 2

1
def url_before_type_cast    
 p = 'http://'
 u = self[:url].capitalize
 u.starts_with?(p) ? u : "#{p}#{u}"    
end
于 2010-02-20T18:32:30.450 に答える
-1

返品とは、セットを意味しますか?

テキスト フィールドはデータをコントローラーに送信します。(に応じて作成または更新)

コントローラーで:

@post = Post.new(params[:post])
or
@post.update_attributes(params[:post])

フィールドが設定されている場所です。

セッターを実装して http:// を追加する場合は、関数を として記述しますdef url=

于 2010-02-20T18:40:18.313 に答える