Ruby on rails 在创建前记忆当前用户对象
使用Rails 3.2。假设我有10张新照片要上传,我需要将我的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
当前用户.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
。十个实例,十个变量,十个查询。