Как методы поля ввода (text_area, text_field и т. Д.) Получают значения атрибутов из записи в блоке form_for? - PullRequest
1 голос
/ 20 февраля 2010

У меня есть стандартное приложение Rails 2.3.5 с моделью под названием Post. Post имеет атрибут url, и определяется следующий метод получения:

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

Если я загружу script/console, я могу сделать Post.first.url и получить желаемый результат (например, он возвращает http://foo.com, если истинное значение атрибута - foo.com)

Однако, если у меня есть блок form_for и я сделаю что-то вроде form.text_field :url, он не вернет URL с префиксом http: //; скорее он просто возвращает foo.com

Как form_for обращается к атрибутам на моделях ActiveRecord? Кажется, он обходит любые перегруженные геттеры.

Ответы [ 2 ]

1 голос
/ 20 февраля 2010
def url_before_type_cast    
 p = 'http://'
 u = self[:url].capitalize
 u.starts_with?(p) ? u : "#{p}#{u}"    
end
0 голосов
/ 20 февраля 2010

Под возвратом вы имеете в виду наборы?

В текстовом поле данные отправляются на ваш контроллер. (Создание или обновление в зависимости от)

В контроллере:

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

- это место, где установлено поле.

Если вы хотите реализовать установщик для добавления http: //, вы должны написать свою функцию как def url=.

...