0

送信する前に、存在を検証したいフォームに 2 つのフィールドがあります。ただし問題は、コントローラーのモデルにはデータベースにこれらのフィールドがないため、仮想属性を作成してみました。ただし、それを機能させる方法はよくわかりません。

「Find_number」と呼ばれるモデルでこれを実行してみました

class FindNumber < ActiveRecord::Base

    attr_accessor :name
    attr_accessor :original_number

    validates :name, presence: true
    validates :original_number, presence: true

end

Find_numbers コントローラーの create アクション内の以下

def create
    @user = current_user
    client = Twilio::REST::Client.new(@user.twilio_account_sid, @user.twilio_auth_token)

    search_params = {}
      %w[in_postal_code near_number contains].each do |p|
        search_params[p] = params[p] unless params[p].nil? || params[p].empty?
      end

    local_numbers = client.account.available_phone_numbers.get('US').local
    @numbers = local_numbers.list(search_params)

    if :name.valid? && :original_number.errors.any?
        unless @numbers.empty?
        render 'find_numbers/show'
        else
        flash.now[:error] = "Sorry, We Couldn't Find Any Numbers That Matched Your Search! Maybe Something Simpler?"    
        render 'find_numbers/new'
        end
    else
    flash.now[:error] = "Sorry, We Couldn't Find Any Numbers That Matched Your Search! Maybe Something Simpler?"    
    render 'find_numbers/new'   
    end     
end

情報を入力すると、エラーが発生します

undefined method `valid?' for :name:Symbol

:name 属性と :original_number 属性を間違って呼び出している可能性があります。また、二重の if then ステートメントは非常に新しく見えます :P.

:name.valid の場合、何を置き換える必要がありますか? && :original_number.errors.any? 、それが検証されることを確認するには?それとも、私が見逃しているものがもっとたくさんありますか?

4

1 に答える 1

0

「コントローラー」と「モデル」の境界を混同していると思います。コントローラーは、作成したモデル内の検証について何も知りません。コントローラが呼び出されFindNumbersController、モデルが呼び出されるという事実はFindNumber、共有機能の観点からは実際には何の意味もありません。

渡されたパラメータを使用してモデルのインスタンスを明示的に作成し、モデルにインスタンスの検証を実行させる必要があります

find_number = FindNumber.new(params.slice(:name, :original_number))

次に、インスタンス全体が有効かどうかを確認できます

find_number.valid?

または、特定のフィールドにエラーメッセージがあるかどうか

find_number.errors[:field].any?

だから、:name.valid?なりfind_number.errors[:name].empty?:original_number.errors.any?find_number.errors[:original_number].any?

于 2012-10-03T19:32:42.000 に答える