0

使用 Rails 3.2。假设我要上传 10 张新照片,我需要将我的照片current_user.id与每条新记录相关联。由于某些原因,它photos_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 

很明显,如果要创建 10 条新记录,我希望模型找到current_user一次,然后从缓存中取出(一种记忆技术),但是因为我使用before_createcurrent_user是 ,所以查询 10 次而不是获取它来自缓存。

我该怎么做才能缓存@current_user_id

谢谢。

4

2 回答 2

0

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

相反,在您的控制器中执行此操作,因此您只需获取current_user.id一次,并将其分配给您的记录。

于 2012-12-01T14:04:55.177 回答
0

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

确保也将其设为私有。

于 2012-12-01T15:28:25.180 回答