こんにちは、私は最後の数日間、運がないと働いているという検証の問題があります。私が持っているのは、ユーザーにURLを入力させるモデルがあるということです。私は私のモデルでは、以下でこれをやった:Rails 3 - フォームの検証 - ロジックをコールバックまたはオブザーバに移動する
validates :url, :presence => true
ユーザーがフォームを送信すると、私は彼らのURLを取得し、Webページのタイトルのような基本的な事柄を引っ張って鋸山で開きます。私は現在、コントローラのCreateメソッドでこれを行っています。コードはそのようになっています
def create
require 'open-uri'
@page = Page.new(params[:page])
doc = Nokogiri::HTML(open(@page.url))
私はにして実行の問題は、ユーザーが空白のフォームを入力した場合、それは私がフォームを検証しようとしたにも関わらず、実行時に、鋸山が出てエラーになりますということです。
私の質問は、この種のロジックをコールバックまたはオブザーバーに移すべきかどうかです。私はかなりレールに新しいですが、コールバック/オブザーバからデータ/インスタンス変数で作業する方法がありますか?私は単純に@pageを使って失敗しましたが、この種のロジックが置かれている場所であれば、コールバック/オブザーバに渡す方法があるのだろうかと疑問に思っていました。
ありがとう
お世話になりました。今は魅力のように働いています。いくつかのドキュメントを読んでいるうちに見つけられなかったコールバックについて別の質問がありました。 before_saveコールバックはcreateメソッドの後で実行する方法はありますか?それは、それが保存される前に更新後も実行されています。私はそれを分離する必要があるので、それは作成の後でしかないので、なぜ私はもともとコントローラー上でそのメソッドのロジックを持っていたのです。 – Kombo
pull_info_from_urlの先頭に「new_recordがなければ返す」と言うことができます。私はこれを達成すると信じています。または、before_saveの代わりにbefore_createを使用することもできます。 http://edgeguides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacksには、コールバックと検証に関する詳細があります。 – PerfectlyNormal