使用基于会话的模型时,在rails中获取错误“未定义的局部变量或方法会话”

时间:2013-08-04 16:41:24

标签: ruby-on-rails

提供错误的代码位于CommentsController

if @comments.save
    user_session.add_comment(@comments)  // this is cause of error
    # session[:comment_ids] ||= []
    # session[:comment_ids] << @comments.id
    flash[:notice] = "Comment Successfully created"
    redirect_to @post
else
    redirect_to :back
end

当我去编辑在会话中存储1分钟的评论时。我收到了这个错误:

NameError in CommentsController#create
undefined local variable or method `session' for #<UserSession:0xaca0684>

add_comment在会话模型中定义。

还有一件事我想说错误发生是因为我在会话模型中使用了集中位置,否则上面评论的代码工作正常。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您已将注释掉的代码重构为user_session对象。

如果您阅读错误消息,则会看到错误引用变量session for #<UserSession:0xXXXXX>。据此我了解到,您尝试从session类中引用UserSession对象,但未将传递给user_session对象。

您应该将其添加到方法的签名中,并按照以下方式使用它:

class UserSession
  def add_comment(session, comment)
    session[:comment_ids] ||= []
    session[:comment_ids] << comment.id
  end
end

在你的控制器中:

if @comment.save
    user_session.add_comment(session, @comment)

    flash[:notice] = "Comment Successfully created"
    redirect_to @post
else
    redirect_to :back
end