我正在从电子表格文档中导入大量学生数据。每行学生数据将代表一个新用户,但是,存在导入现有学生的可能性,我想相应地绕过一些用户验证,例如用户名唯一性,以便我可以为新记录和现有记录建立关联,但前提是它们被导入同一所学校。
到目前为止,我的用户模型中有以下验证设置:
用户.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我的模型中的助手。
我不担心重复用户名,因为我将在不同的步骤中处理它,这只是初步验证。
编辑
简化的学校和用户模型:
用户.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
学校.rb
class School < ActiveRecord::Base
attr_accessible :country_id, :name, :state_id
has_many :users
end