在rails中获取会话数据

时间:2010-07-01 20:26:38

标签: ruby-on-rails session

我是来自php的rails的新手,我正在学习使用mongodb的rails 3.

我已经到了将html表单发布到mongo的文本,我可以创建并以用户身份登录。

在用户登录中,我创建了一个由nifty authenticate

创建的会话
session[:user_id] = user.id

现在我正在尝试在创建新帖子时从会话中获取user_id,以便帖子连接到用户。

在我的posts_controller中,我有如下的create函数。

def create
    @post = Post.new(params[:post])
    respond_to do |format|
      if @post.save
        format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
        format.xml  { render :xml => @post, :status => :created, :location => @post }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }
      end
    end
end

但是,我相信我需要在这里传递user_id,或者将它放在我的模型中会更好。

但尝试任何类型的

@user_id = session[:user_id]

没有返回任何有意义的内容。我是以错误的方式解决这个问题吗?

我已经看过描述在数据库中存储会话的帖子,但我真的不明白为什么这对于像获取当前登录的user_id这样简单的事情来说是必要的。

2 个答案:

答案 0 :(得分:1)

如果您只想跟踪在帖子数据库中创建帖子的用户?在帖子模型中简单:

  

属于:user

应该有效。只要您的post db中也有user_id字段 (我不确定这是否是你要求的。)

答案 1 :(得分:1)

查看文档:{​​{3}}

Nifty身份验证包括一个名为current_user的方法(Rails的大多数身份验证解决方案遵循相同的命名约定),它将完全按照其说法执行,获取当前用户。所以,您可以执行以下操作:

post.user = current_user

编辑只有在您按照Mike的详细说明创建正确的关系后,才能执行此操作。