Linking 3 Models with has_many relationships

Hello, i've been searching for a solution to a problem i've come
across and have not been able to find it yet. I'm working on a
website that returns the closest delivery restaurants to you based on
your location. I've completed this but i've begun adding a review
process to the websites. My problem right now is trying to link the
users, reviews, and restaurants models together.

Right now the relationship i've drawn up is

Restaurant - has_many :reviews
User - has_many :reviews
Review- belongs_to :user
              belongs_to :restaurant

Now this has got me far enough to be able to link them. Showing the
reviews for a restaurant on a restaurant show page, and showing all
of the reviews of a user on a type of control panel page. However i
don't think i implemented this correctly, because i am not able to
destroy a review and have it be removed from both the restaurant and
the user.

def create
    @review = @restaurant.reviews.build(params[:review])
    @user_review = current_user.reviews.build(params[:review])
    if (@review.save && @user_review.save)
      redirect_to restaurant_path(@restaurant)
    else
      render :action => "new"
    end
  end

this creates two separate reviews, one for each model. fields for a
review are::

r = Review.find(114)
=> #<Review id: 114, user_id: nil, restaurant_id: 5, title: "pizza",
body: "fdsafds", rating: 4, created_at: "2010-02-23 05:06:18",
updated_at: "2010-02-23 05:06:18">

I need to have a single entry contain both my user_id and
restaurant_id but i'm not sure how to accomplish this. I've been
reading about multi-model forms, has_many :through, and a bunch of
different plugins but i cant seem to relate it to my problem. Any
help is greatly appreciated, thanks!

However i don't think i implemented this correctly

You only need to add a slight modification to the create action so that
the same review is connected to both the user and the restaurant:

@review = @restaurant.reviews.build(params[:review])
@review.user_id = current_user.id #hooks this review up to current_user
if (@review.save)
#(...)

Fixed code:

def create

@review = @restaurant.reviews.build(params[:review])

@review.user = current_user   # FIXED HERE

if (@review.save)   # AND HERE

  redirect_to restaurant_path(@restaurant)

else

  render :action => "new"

end

end

this creates two separate reviews, one for each model. fields for a

review are:

It will do, you were building two reviews and then saving them both. You should create one and then save it.

Cheers,

Andy