2017-01-29 13 views
0

モデルに問題があります。私は2つのフォーム(2人が別々のデータを入力する必要があるため)によって更新されるモデルを持っています。フォーム1には、必要なデータの前半が含まれているため、そこでデータを検証する必要があります。1つのモデルの個別のフォームのパラメータを検証します

フォーム1で入力したデータのみを検証する方法を見つけるのが難しいです。私のサブスクリプション.rbモデルファイルがあります。

class Subscription < ActiveRecord::Base 
    # werkgever form 

    if form_id == 'form1' 
    validates :email, presence: true 
    end 

    # werknemer form 
    if form_id == 'form2' 
    validates :name, presence: true 
    validates :city presence: true 
    end 
end 

文は私が更新し、その逆のときのForm2上のエラーを取得いけないように、そのフォームにbeloging値のみが検証されるようになるだろう、何かが含まれている場合、私は必要です。

これは十分明確です。どんな助けもありがとうございます。おかげさまで

+2

1と2を区別するにはどうすればよいですか?私は、これらのフォームを「フォームオブジェクト」(https://robots.thoughtbot.com/activemodel-form-objects)で別々のフォームに分けることが、この状況では最も理想的だと思います。 –

+0

これは関連する質問ですhttp://stackoverflow.com/questions/24641143/rails-conditional-validation-in-modelモデルに仮想属性を自由に追加し、フォーム経由で非表示フィールドとして渡してください。 – taro

答えて

1

あなたは条件で検証を設定できます

attr_accessor :form_type  

validates :email, presence: true, :if => :werkgever_form? 

def werkgever_form? 
    form_type == 'werkgever' 
end 

:form_typeはデータベースに保存され、唯一の検証のために必要されていない仮想の属性です。あなたは、各フォームに隠しフィールドとして、この属性を設定することができます。

<%= form.hidden_field :form_type, 'werkgever' %> 
+0

このドミトリーのおかげで、これは私のために働いた! –

1
attr_accessor :form_type 
validates :email, presence: true, if: :check_if_form_one 
validates :name, presence: true, unless: :check_if_form_one 
validates :city presence: true, unless: :check_if_form_one 

def check_if_form_one 
    /* Add your condition here 
    example: form_type == 'form1' */ 
end 

あなたは、コントローラのメソッドまたはビューページからform_typeを設定することができます。

関連する問題