views:

36

answers:

2

I'm new to rails coming from php, and I'm learning rails 3 with mongodb.

I have got to the point where I have an html form post text to mongo, and i can create and login as a user.

In the user login, i create a session with as created by nifty authenticate

session[:user_id] = user.id

now I'm trying to get that user_id from the session when I create a new post so that the post is connected to the user.

in my posts_controller, I have the create function as follows.

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

however, i believe I need to pass the user_id in here, or maybe it would be better to put it in my model.

But attempting any sort of

@user_id = session[:user_id]

hasn't returned anything meaningful. Am I going about this the wrong way?

I've seen posts which describe storing sessions in the database, but I don't really see why this should be necessary for something as simple as just getting the currently logged-in user_id.

+1  A: 

If you are just looking to keep track of the user who created the post in your post db? Within the post model a simple:

belongs to: user

should work. As long as you have a user_id field in your post db as well (I'm not exactly sure if this is what you were asking for.)

mike
Thanks mike, that actually does solve the problem at this instance (I was doing both belongs_to AND storing the user_id as a key). However, I'm sure I'll want to get the user from a session at some point in the future. I guess part of my question now is how does the post model know which user is the currently logged in one?
pedalpete
+1  A: 

Take a look at the docs: Nifty Authentication

Nifty Authentication includes a method called current_user (most of the authentication solutions for Rails follow the same naming convention) that will do exactly as it says, get the current user. So, you could do the following:

post.user = current_user

EDIT This can be done only after you create the proper relationship as detailed by Mike.

sosborn