用下面的關聯:驗證存在從另一個模型
class Profile < ActiveRecord::Base
belongs_to :visitor
belongs_to :contact_point
validates :contact_point, presence: true
end
class Visitor < User
has_one :profile, dependent: :destroy
has_one :contact_point, through: :profile
end
class ContactPoint < User
has_many :profiles
has_many :visitors, through: :profiles
end
每個ContactPoint
有一個電子郵件。當訪問者使用以下表單創建其個人資料時,她需要使用屬於ContactPoint
的電子郵件地址確定個人資料聯繫點。聯繫點用戶已創建,訪問者不應該能夠更新ContactPoint
模型。
<%= form_for @profile do |f| %>
<%= f.label 'First Name' %>
<%= f.text_field :first_name %>
<%= f.label 'Last Name' %>
<%= f.text_field :last_name %>
<%= fields_for :contact_point, @profile.contact_point do |ff| %>
<%= ff.label 'Contact point email' %>
<%= ff.text_field :email %>
<% end %>
<% end %>
在ProfilesController
我傳遞的參數來分析這樣的模型:當沒有ContactPoint
提供的電子郵件地址
def create
@profile = Profile.create(profile_params)
end
def profile_params
contact_point = ContactPoint.find_by_email(params[:contact_point][:email])
params.require(:profile).permit(:first_name, :last_name)
.merge(visitor_id: current_user.id, contact_point: contact_point)
end
通過以上的設置,該contact_point
變量設置爲nil
驗證人無法區分填寫的聯繫人電子郵件是否爲空。 現在,我如何添加驗證以檢查contact_points
表中此電子郵件地址的存在並顯示自定義錯誤消息?
'驗證:contact_point,存在:TRUE'應該做的伎倆。你確定記錄正在保存到數據庫嗎? –
問題是,contact_point = ContactPoint.find_by_email(params [:contact_point] [:email])'設置contact_point_id爲零,當這個電子郵件地址沒有contact_point時。 contact_point_id將爲零的其他情況是當發佈表單中該字段爲空時。我需要驗證者來隔離這兩個案件。 – Sajjad