Ruby on rails 在创建前记忆当前用户对象

Ruby on rails 在创建前记忆当前用户对象,ruby-on-rails,Ruby On Rails,使用Rails 3.2。假设我有10张新照片要上传,我需要将我的当前用户.id关联到每个新记录。由于某些原因,photos\u controller.rb是空的,因为它与另一个模型Shop嵌套。这是我的密码: class Photo < ActiveRecord::Base belongs_to :attachable, :polymorphic => true, :counter_cache => true belongs_to :user, :counter_cac

使用Rails 3.2。假设我有10张新照片要上传,我需要将我的
当前用户.id
关联到每个新记录。由于某些原因,
photos\u controller.rb
是空的,因为它与另一个模型
Shop
嵌套。这是我的密码:

class Photo < ActiveRecord::Base
  belongs_to :attachable, :polymorphic => true, :counter_cache => true
  belongs_to :user, :counter_cache => true

  before_create :current_user_id
  before_create :associate_current_user

  def current_user_id
    @current_user_id ||= UserSession.find.user.id
  end

  private

  def associate_current_user
    self.user_id = @current_user_id
  end
end 
class-Phototrue,:计数器\u缓存=>true
属于:user,:counter\u cache=>true
创建前:当前用户id
创建前:关联当前用户
def当前用户id
@当前_user_id | |=UserSession.find.user.id
结束
私有的
def关联_当前_用户
self.user\u id=@current\u user\u id
结束
结束
很明显,如果要创建10条新记录,我希望模型找到
当前用户
一次,然后从缓存中取出它(一种记忆技术),但是因为我在创建
之前使用
,所以会查询
当前用户
,而不是从缓存中获取它

如何缓存
@当前用户id


谢谢。

答案很简单:你不应该在你的模型中做任何与会话相关的事情,它打破了MVC模式


相反,在您的控制器中执行此操作,这样您只需获取一次当前用户id,并将其分配给您的记录。

这种逻辑属于控制器。将您的
当前用户\u id
方法移动到您的
PhotosController
(如果您计划在其他控制器中也使用此逻辑,则移动到
ApplicationController
)。这样,每次上传操作只分配一次
@current_user

一定要保密

这是一个模型,
@current\u user\u id
是一个实例变量。
Photo
的每个新实例都会获得自己的
@current\u user\u id
。十个实例,十个变量,十个查询。