【问题标题】:get session data in rails在 Rails 中获取会话数据
【发布时间】:2011-03-10 20:06:59
【问题描述】:

我是来自 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]

没有返回任何有意义的东西。我是不是走错了路?

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

【问题讨论】:

    标签: ruby-on-rails session


    【解决方案1】:

    查看文档:Nifty Authentication

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

    post.user = current_user
    

    编辑这只能在您创建正确的关系后完成,如 Mike 所述。

    【讨论】:

      【解决方案2】:

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

      属于:用户

      应该可以。只要您的帖子数据库中也有一个 user_id 字段 (我不确定这是否是您所要求的。)

      【讨论】:

      • 感谢 mike,这实际上确实解决了这个问题(我同时执行了 belongs_to 并将 user_id 存储为密钥)。但是,我确信我会希望在将来的某个时候从会话中获取用户。我想我现在的部分问题是帖子模型如何知道当前登录的是哪个用户?
      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多