San*_*nti 4 activerecord ruby-on-rails ruby-on-rails-4
我正在尝试自动将当前添加user_id到 acreated_by和updated_by字段中。谁能帮我?
这是数据模式:
create_table "businesses", force: :cascade do |t|
t.string "business_name"
t.string "last_name"
t.date "start_date"
t.date "end_date"
t.integer "created_by"
t.integer "modified_by"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Run Code Online (Sandbox Code Playgroud)
首先,current_user在你的controller,没有任何直接的方式来得到这些数据model。
我只是想一个这样的解决方案,欢迎任何建议:
模型
class User < ActiveRecord::Base
cattr_accessor :current_user
# Your current code
end
Run Code Online (Sandbox Code Playgroud)
应用控制器
class ApplicationController < ActionController::Base
before_action :set_current_user
def set_current_user
User.current_user = current_user if current_user
end
end
Run Code Online (Sandbox Code Playgroud)
回到你的商业模式
class Business < ActiveRecord::Base
# Your current code
before_create :update_created_by
before_update :update_modified_by
def update_created_by
self.created_by = current_user_id
end
def update_modified_by
self.modified_by = current_user_id
end
def current_user_id
User.current_user.try(:id)
end
end
Run Code Online (Sandbox Code Playgroud)
因此,当user登录并执行任何操作时,当前用户信息将被设置为User.current_user,因此,如果 abusiness被创建或更新,该current_user信息将通过回调设置。
我在这里想一个更好的解决方案,因为这不是线程安全的!
| 归档时间: |
|
| 查看次数: |
6721 次 |
| 最近记录: |