Как методы поля ввода (text_area, text_field и т. д.) получают значения атрибутов из записи в блоке form_for?

У меня есть стандартное приложение Rails 2.3.5 с моделью 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? Кажется, он обходит любые перегруженные геттеры.


person Kyle    schedule 20.02.2010    source источник


Ответы (2)


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

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

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

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

где установлено поле.

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

person lillq    schedule 20.02.2010
comment
Привет. Я имею в виду значение текстового поля, заполняемое form.text_field :url - person Kyle; 21.02.2010

person    schedule
comment
Спасибо; Будет ли это работать в обоих контекстах (form.text_field и при выполнении @post.url)? - person Kyle; 21.02.2010