在 Ruby on Rails 中自动更新 created_by 和 updated_by 值

San*_*nti 4 activerecord ruby-on-rails ruby-on-rails-4

我正在尝试自动将当前添加user_id到 acreated_byupdated_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)

Hie*_*ham 5

首先,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信息将通过回调设置。

我在这里想一个更好的解决方案,因为这不是线程安全的!