2012-01-29 1 views
0

私は、再利用される複数レベルのネストされたフォームを持つRails 3.1プロジェクトを持っています。多くの親を持つ子供は、その週末に誰が滞在しているかによって認証が異なりますか? (Rails3)

たとえば、TeacherにはネストされたBeingがあります。

class Teacher < ActiveRecord::Base 
    has_one :being 
    accepts_nested_attributes_for :being 
end 

アン応募はまた、ネストされたビーイング

class Entrant < ActiveRecord::Base 
    has_one :being 
    accepts_nested_attributes_for :being 
end 

を持っている私は(ビーイングモデルで)誕生日を確認できるようにしたいのですが、ビーイングの親は、応募者の場合のみ。ビーイングモデルにおいて

attr_accessor :no_birthday 
validates :birthday, :presence => {:message => 'Birthday is required to enter classes.'}, :unless => :no_birthday? 

def no_birthday? 
    unless self.no_birthday 
     errors.add(:entrant, "Birthday is required.") 
    end 
end 

形態(教師バージョンのみ)

<%= hidden_field_tag 'no_birthday', "1" %> 

また、念のため、teacher_controllerで:

def create 
... 
    @teacher = Teacher.new(params[:teacher]) 
    @teacher.being.no_birthday = 1 
... 
end 

どういうわけか、私はマークから非常に遠いです。私は誰もが誰のためにも検証作業をすることができます。私は、私に並行して走っている簡単な解決策があるように感じます。誰がそれが何であるか知っていますか?だから、

+0

Hm。私はあなたをすべて困らせたと思うよ! –

答えて

0

、上記の方法でいくつかの問題:

1)検証ライン。本当のことでなければ、それはそうではないようです。再フォーマット:文(ビーイング・モデルの)場合:

validates :birthday, :presence => {:message => 'Birthday is required to enter classes.'}, :if => :birthday_needed? 

私もあれば代わりのない限りとして、より良い英語の意味を理解するためにモデルにメソッドの名前を変更しました。

def birthday_needed? 
    birthday_needed 
end 
#checks for trueness of accessor named birthday_needed 

2)私は、必要なコントローラからアクセサを設定することで問題を解決できます。つまり、親のコントローラの1つがアクセサーをtrueに設定し、もう一方のコントローラーはアクセサーをtrueに設定します。他の親は、単にこのアクセサはまったく設定されていません

def create 
    ... 
    @entrant.being.birthday_needed = true 
end 

:例として、のコントローラを作成

親#1:いいえ、隠しフォームフィールドのおかしなまたは他のランダムなアプローチのいずれか私が探していませんでした。もちろん

、私はビーイングのモデルのための適切なアクセサを作成する必要がありますまたは全部でエラーが発生します:

attr_accessor :birthday_needed 

そして今を、そのすべての作品。教師は誕生日や入場者は必要ありません。最後に、両親は一緒に行くことができます。

関連する問題