正如标题所述,我的所有其他模型都能够在我的模型中识别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
没有测试过,也许它不会那样工作。
答案 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