在Rails中的 Model(业务层)中使用current_user,关于这个话题我google了一下,看到了有两种方式:
第一种就是为某一个Model加一个类变量current_user,然后在控制层(Controller)中加一个前置过滤器,来设置Model的current_user类变量。
代码如下:
在Model中
class User < ActiveRecord::Base
cattr_accessor :current_user
#...
end
在控制器中:
class ApplicationController < ActionController::Base
include AuthenticatedSystem
before_filter :set_current_user
protected
def set_current_user
User.current_user = current_user # current_user方法已经在lib中写好了
end
end
第二种比较特别\trick,是在线程中加一个变量,代码如下:
在ApplicationController中
class ApplicationController < ActionController::Base
before_filter :set_request_environment
private
# stores parameters for current request
def set_request_environment
User.current = current_user # current_user is set by restful_authentication
# You would also set the time zone for Rails time zone support here:
# Time.zone = Person.current.time_zone
end
在Model中:
class User < ActiveRecord::Base
#-----------------------------------------------------------------------------------------------------
# CLASS METHODS
#-----------------------------------------------------------------------------------------------------
def self.current
Thread.current[:user]
end
def self.current=(user)
raise(ArgumentError,
"Invalid user. Expected an object of class 'User', got #{user.inspect}") unless user.is_a?(User)
Thread.current[:user] = user
end
end
大家 认为哪一种方式更好呢?
我个人比较看好第二种。
相关链接:
http://clearcove.ca/blog/2008/08/recipe-make-request-environment-available-to-models-in-rails/#more-273
http://www.neeraj.name/blog/articles/755-using-current_user-in-model-and-other-places
分享到:
相关推荐
自述文件版本和设置$ ruby -vruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]$ rails -... $ rails new rails_model_test_hello_world -T -m ~/rtfb_template.rb$ cd rails_model_test_hello_world$ rail
Rails_Recipes_with_Source_Code
在您的config/initializers/rails_admin.rb初始化程序中添加配置: RailsAdmin . config do | config | config . model Post do list do sort_by :position # Add Default sorting sort_reverse false # sort p
使用Rails4Devise和Grape验证API_JavaScript_CSS_下载
Gemfile 中: gem 'current_domain'然后执行: $ bundle或者自己安装: $ gem install current_domain用法一旦这个 gem 被包含到 Rails 应用程序的 Gemfile 中, current_domain辅助方法在应用程序的所有控制
应用Rails进行REST 开发 ,翻译自《RESTful Rails Development》
RailheadAutouser 是一个 Ruby on Rails 插件,可自动将 current_user 设置为模型。 安装 添加到您的 Gemfile: gem 'railhead_autouser' 用法 在您的迁移中设置用户: create_table :table_name do |f| f....
Rails :: SessionCookie ...session [ :current_user_id ] = current_user . id # somewhere in helper for request specs def login ( current_user ) post '/login' , auth_data ( current_user ) end # no
这个 gem 是用于测量gem 的 Rails 集成。 它提供了 ActiveRecord 适配器,用于保存和检索测量值及其单位和模型验证。 用法 活动记录 列应具有_valueand_unit后缀,并且是DECIMALand VARCHAR,并且接受默认值。支持...
效果展示: https://github.com/zaru/action_cable-ika-game-sample/raw/master/ika2.gif?raw=true
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
Rails 管理员成为用户 ... rails_admin_become_user必须在rails_admin之后rails_admin才能正常工作。 在您的config/initializers/rails_admin.rb初始化程序中添加配置: RailsAdmin . config do | config |
Rails 的英文脏话过滤器 这个插件将允许您使用基本替换或字典术语过滤亵渎。
css和图片 博文链接:https://hideto.iteye.com/blog/197517
一个从图像生成引导配色方案的 Rails 应用程序
gem 'rails_admin_content_builder' 运行生成器并进行迁移 rails g rails_admin_content_builder rake db:migrate 在app / assets / application.scss中添加样式 * = require rails_admin_content_builder 用法 ...
[Ruby_on_Rails][中文][Rails_5.x]__03-2_._安裝不同版本的Rails與產生Rails_5.x版
在 ApplicationController 中用于current_user和authorize辅助方法。 用户在布局文件中注册、登录和注销的链接。 布局文件中的 Flash 消息支持。 安装Bcrypt提醒Rails 命令生成您的用户模型。 通过has_secure_...
复杂Rails系统架构优化
用简单的定义语法替换了固定装置,支持多种构建策略(保存的实例,未保存的实例,属性哈希和存根对象),并且支持同一类的多个工厂( user , admin_user等),包括工厂继承。 从factory_girl_rails过渡? 查看 。...