模型无法识别rails中的current_user或User.current?

时间:2014-01-20 15:35:23

标签: ruby-on-rails-3 devise

正如标题所述,我的所有其他模型都能够在我的模型中识别User.current,但在我的一个新模型中,我正在尝试执行以下操作并且无法使其正常工作。实际上我认为它确实有效,但它表示它没有那个专栏。用户中有列,如果我分配用户,我可以通过Rails控制台访问它。用户也可以使用设计进行身份验证。这是我模型中的代码;

MODEL

def self.something

    user = User.current
    if user.oauth.blank?

    else 

    end

end

我正在努力思考什么是错的,并且没有任何线索。我猜我可以这样从控制器传递它;

CONTROLLER

def index
   Model.something(current_user)
end

MODEL

def self.something(current_user)

   user = current_user
   if user.oauth.blank?

   end

end 

没有测试过,也许它不会那样工作。

1 个答案:

答案 0 :(得分:2)

current_user是控制器帮助程序,在模型中不可用。实际上,尝试在模型中使用它违反了Rails使用的模型 - 视图 - 控制器结构。虽然可能存在允许其工作的黑客攻击,但我强烈建议您找到解决问题的替代方案。

例如,如果您的模型总是希望current_user包含当前登录的用户,那么当Rails在控制台上运行时应该使用哪个用户? rake任务怎么样?

这里正确的方法是将current_user从控制器传递给模型,就像在代码示例中一样。这意味着可能最终需要知道当前用户的任何控制器操作都应该包含它。在我的项目中,我将始终在控制器操作的上下文中传递当前用户。一个例子:

class ThingsController
  def update
    @thing = Thing.find(params[:id])
    if @thing.update_attributes(thing_attributes_for_update)
      # Redirect with flash message
    else
      render :edit
    end
  end

  private

  def thing_attributes_for_update
    params[:thing].slice(%w(first_name last_name).merge({'updater' => current_user})
  end
end