1

我有一个标准 Rails 2.3.5 应用程序,其模型名为 Post。Post 有一个名为 url 的属性,并定义了以下 getter:

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

如果我加载script/console,我可以做Post.first.url并得到想要的结果(例如,如果属性的真值为 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])

是设置字段的位置。

如果你想实现 setter 来添加 http:// 你应该把你的函数写成def url=.

于 2010-02-20T18:40:18.313 回答