Rails 3 - Проверка формы - Перемещение логики в обратный вызов или в Observer? - PullRequest
1 голос
/ 11 января 2011

Привет всем, у меня проблемы с проверкой, над которой я работал последние пару дней без удачи. У меня есть модель, которая требует от пользователя ввода URL. Я сделал это со следующим в моей модели:

validates :url, :presence => true  

Когда пользователь отправляет свою форму, я беру его URL и открываю его с помощью Nokogiri, чтобы вытащить основные вещи, такие как заголовок веб-страницы. В настоящее время я делаю это с моим методом Create в контроллере. Код выглядит так:

def create
    require 'open-uri'
    @page = Page.new(params[:page])

doc = Nokogiri::HTML(open(@page.url))

Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь вводит пустую форму, Nokogiri выдаст ошибку при запуске, даже если я попытался проверить форму.

У меня вопрос: должен ли я перенести такую ​​логику на обратный вызов или на наблюдателя? Я довольно новичок в рельсах, но есть ли способ для меня работать с переменными данных / экземпляра от обратного вызова / наблюдателя? Я просто не смог использовать @page, но мне было интересно, есть ли способ, которым я должен передать его в callback / наблюдатель, если именно здесь должна быть размещена логика такого типа?

Спасибо

1 Ответ

3 голосов
/ 11 января 2011

Было бы лучше поместить это в модель.

Метод контроллера делает что-то вроде

def create
  @page = Page.new(params[:page])
  respond_with @page
end

и в модели у вас есть

class Page < ActiveRecord::Base
  ...
  before_save :pull_info_from_url

  def pull_info_from_url
    doc = Nokogiri::HTML(open(self.url))
    ...
  end
end

обратный вызов before_save запускается после проверок, так что если присутствиепроверка завершается неудачно, этот код не выполняется, и вместо этого отображается форма с ошибками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...