ers,Ruy on Rails - SessionsHelper的範圍是否覆蓋模型?
在我的組織模塊中,我嘗試在創建組織記錄之前爲字段賦值。
我在模型中使用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(從導軌教程啓發)代碼:
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
我很樂意理解它爲什麼不能在模型中工作。
非常感謝您的幫助,
最好的問候,
弗雷德
'current_user'方法可以從控制器訪問(提供'SessionsHelper'包含在'ApplicationController'中)和視圖(默認情況下)。 –
您無法在模型內訪問current_user。如果沒有更好的方法,請將其作爲模型內部方法的參數。通常有。 – devanand