ers,
在我的组织模块中,我尝试在创建组织记录之前为字段分配值。
我在模型中使用了before_create过滤器,通常可以正常工作。 但是当我尝试分配来自会话中定义的current_user方法的属性的值时,我得到一个未定义的方法'current_user'错误消息。
由于这样做在控制器中工作正常,我想为什么它在模型中不起作用?
以下是我的模型代码:
# == Schema Information
#
# Table name: organisations
#
# id :integer not null, primary key
# playground_id :integer
# code :string(255)
# name :string(255)
# description :text
# parent_organisation_id :integer
# organisation_level :integer
# hierarchy :string(255)
# created_by :string(255)
# updated_by :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class Organisation < ActiveRecord::Base
### before filter
before_create :set_code
before_create :set_hierarchy
validates :code, presence: true, uniqueness: true
validates :name, presence: true, uniqueness: true
validates :organisation_level, presence: true
validates :created_by , presence: true
validates :updated_by, presence: true
# validates :owner_id, presence: true
# validates :status_id, presence: true
validates :playground_id, presence: true
# belongs_to :owner, :class_name => "User", :foreign_key => "owner_id" # helps retrieving the owner name
# belongs_to :status, :class_name => "Parameter", :foreign_key => "status_id" # helps retrieving the status name
belongs_to :organisation
has_many :organisations
### private functions definitions
private
### before filters
def set_code
if Organisation.count > 0
self.code = self.organisation.code + '-' + code
end
end
def set_hierarchy
if Organisation.count == 0
self.hierarchy = current_user.current_playground_id.to_s + '.001'
else
last_one = Organisation.maximum("hierarchy")
self.hierarchy = last_one.next
end
end
end
以下是我的SessionsHelper代码(灵感来自Rails教程):
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
def signed_in?
!current_user.nil?
end
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
end
以下是分配工作的控制器的示例:
@business_flow.playground_id = current_user.current_playground_id
我很高兴了解为什么它在模型中不起作用。
非常感谢你的帮助,
致以最诚挚的问候,
佛瑞德
答案 0 :(得分:0)
SessionsHelper
模块包含在您的控制器类中,因此您可以从那里使用它的方法。它不包含在模型类中。
实际上,即使您手动包含它也可能无法工作,因为模型需要访问cookies
方法才能使current_user
方法起作用。 cookies
来自ActionController
方法。
要实现您的目标,请尝试从创建该对象的控制器中更改Organisation
对象,并传入控制器可以访问的用户信息。