0
不知道這個問題是有道理的,所以我會通過一個例子來說明:如何設置自定義驗證Rails中創建之前的關聯
基本上我有我的應用程序一個公司的模式和公司職員。該員工是一個設計模型,可以註冊/登錄。我有一個嚮導,用於在註冊後選擇他們工作的公司,因此該模型接受公司的嵌套屬性。
在他們選擇他們工作的公司的階段,我想建立一個驗證,以確保他們只通過匹配員工的電子郵件域和公司的電子郵件域在我的數據庫中選擇他們工作的公司。我應該在哪一點做到這一點?我應該設置一個自定義驗證器還是使用回調?
這裏是我的代碼:
員工:
class Employee < ActiveRecord::Base
##################
# Base
###################
rolify
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable
# Setup accessible (or protected) attributes for your model
attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :company_id, :company_attributes
##################
# Associations
###################
belongs_to :company
accepts_nested_attributes_for :company
has_many :authentications, dependent: :destroy
end
公司:
class Company < ActiveRecord::Base
##################
# Base
###################
attr_accessible :name, :address_attributes, :email, :phone_number, :website, :confirmed
##################
# Associations
###################
has_one :address
accepts_nested_attributes_for :address
has_many :employees
end
這裏是控制器,它負責爲員工選擇一家公司,它是一個絕對的寶石精靈控制器。
class EmployeeStepsController < ApplicationController
before_filter :authenticate_employee!
include Wicked::Wizard
steps :personal, :company_details, :enter_company_details
def show
@employee = current_employee
case step
when :enter_company_details
if @employee.company
skip_step
else
@employee.build_company.build_address
end
end
render_wizard
end
def update
@employee = current_employee
@employee.attributes = params[:employee]
render_wizard @employee
end
private
def finish_wizard_path
employee_url(@employee)
end
end
我還有一個控制器,它與添加公司分別涉及到網站管理員的網站,但我只想要觸發嚮導控制器中的電子郵件驗證又名當員工選擇他們的公司。對此有何建議?