我正在從電子表格文檔導入學生數據堆。每行學生數據將代表一個新用戶,但是,存在導入已存在的學生的可能性,我想繞過我的一些用戶驗證,例如用戶名唯一性,以便我可以爲新記錄和現有記錄構建關聯,但只有當他們被輸入到同一所學校時。Rails將參數傳遞給條件驗證
因此到目前爲止,我有以下驗證安裝在我的用戶模型:
user.rb
validates_uniqueness_of :username, :unless => :not_unique_to_school?
def not_unique_to_school?
user = find_by_username(self.username)
user.present? && user.school_id == 6
end
現在我怎麼會去代替那個6的值我要在訪問控制器?教師將是那些處理導入的人,他們會將學生導入他們的學校,所以我通常會運行current_user.school_id來檢索我希望導入的學校ID,但我無法訪問current_user幫手在我的模型中。
我並不擔心重複的用戶名,因爲我將在不同的步驟處理這個問題,這只是初步驗證。
編輯
簡化學校&用戶模型:
user.rb
class User < ActiveRecord::Base
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :username,
:first_name, :last_name, :school_id, :roles_mask
belongs_to :school
validates_presence_of :username, :on => :create, :message => "can't be blank"
validates_uniqueness_of :username, :unless => :unique_to_school?
def unique_to_school?
user = find_by_username(self.username)
user.present? && user.school_id == 6
end
def find_by_username(username)
User.where(:username => username).first
end
end
school.rb
class School < ActiveRecord::Base
attr_accessible :country_id, :name, :state_id
has_many :users
end
你可以發佈你的整個用戶模型和學校模型嗎? –
和你的控制器也可能有用。 –
相信我你不希望我的整個用戶和學校模型,有很多不相關的複雜性在那裏。 – Noz