2016-01-22 207 views
1

我有這個問題。我需要在Rails中以相同的形式驗證兩個模型的屬性。一個是另一個的父母。Rails中嵌套模型的表單驗證

的形式是這樣的:

<%= semantic_form_for @professional do |pro| %> 
     <%= pro.inputs :id => "information" do %> 
      <%= pro.input :name, label: t("Artistic Name") %> 
     <%= pro.semantic_fields_for @user do |user| %> 

     <%= user.inputs :id => "register" do %> 

      <%= user.input :email, :placeholder=>"[email protected]" %> 

      <%= user.input :password, label: t('Password') %> 

      <%end%> 

     <% end %> 

    <% end %> 

<% end %> 

我使用的模型是這樣的:

用戶:

class User < ActiveRecord::Base 
    belongs_to :role, polymorphic: true 
    validates :email, :password, presence: true 

end 

專業人員:

class Professional < ActiveRecord::Base 
has_one :user, as: :role, dependent: :destroy 

accepts_nested_attributes_for :user 

    validates :date_birthday, :gender, :height, :name, :description, :Weight, :address, :languages,:services, :category, :phonenumber, :fullname, :hair_color, :age, :orientation, presence: true 

end 

所以,問題是什麼?

當我點擊提交按鈕時,專業屬性被標記,但不是用戶屬性。

像這樣:

enter image description here

的字段標爲紅色屬於專業模特,但場電子郵件地址和密碼屬於用戶模型,紅色都沒有標明時,它應該是因爲他們是空。

我該怎麼辦?我需要用戶的警告信息是屬性太

謝謝你的進步。

+0

你有關聯設置是否正確? –

+0

@RichPeck我編輯了兩個模型之間的關聯模型代碼 –

回答

1

我們已經實現了您之前需要的功能。

我們不得不使用inverse_of,使該對象是一個單一的數據塊(而非多件按原樣由默認的情況下):

#app/models/user.rb 
class User < ActiveRecord::Base 
    belongs_to :role, polymorphic: true, inverse_of: :user 
    validates :email, :password, presence: true 
end 

#app/models/professional.rb 
class Professional < ActiveRecord::Base 
    has_one :user, as: :role, dependent: :destroy, inverse_of: :role 
    accepts_nested_attributes_for :user 
end 

This會有所幫助。

您還需要確保您正確傳遞這些對象(我看到很多人沒有這樣做)。

0

你需要告訴專業驗證了相關的用戶:

class Professional < ActiveRecord::Base 
    ... 
    validates_associated :user