I''m working on a videogame database, where users can signup, make game entries, rate and review them. I have the Models: User, Game, Rating and Review. Each user can give his own rating to any game, so I have to pass the game.id to the ratings.game_id in order to associate ratings to certain games. And I would like to think that it should work the same way about posting reviews, but every time I the game.id shall be passed, get a Runtime Error "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id" This is what my associations in my models look like user.rb has_many :reviews, dependent: :destroy has_many :reviewed_games, :through => :reviews, :source => :games game.rb has_many :reviews has_many :authors, :through => :reviews, :source => :users review.rb belongs_to :user belongs_to :game This is my review controller def create @game = Game.find_by_id(params[:game_id]) @review = current_user.reviews.build(params[:review]) @review.game_id = @game.id @review.user_id = current_user.id if @review.save flash[:success] = "review created!" redirect_to @review else render ''new'' end end And my Form <%= form_for(@review) do |f| %> <div class="field"> <%= f.text_area :content, placeholder: "Compose new review..." %> </div> <%= hidden_field_tag("game_id", @game.id) %> <%= f.submit "Post", class: "btn btn-large btn-primary" %> <% end %> The Runtime Error occurs, once I try to open the reviews/new url. When I dismiss the hidden_field_tag, I receive the review form, but now posting causes the exact same error (because of the game.id in the create method). I really can''t explain why this is happening, because the very same way my whole rating feature is programmed and it works just fine. Can you Guys help me out? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
On 15 April 2013 21:22, Ryo Saeba <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> I''m working on a videogame database, where users can signup, make game > entries, rate and review them. > > I have the Models: User, Game, Rating and Review. Each user can give his > own rating to any game, so I have to pass the game.id to the > ratings.game_id in order to associate ratings to certain games. > > And I would like to think that it should work the same way about posting > reviews, but every time I the game.id shall be passed, get a Runtime > Error > > "Called id for nil, which would mistakenly be 4 -- if you really wanted > the id of nil, use object_id" > > This is what my associations in my models look like > > user.rb > has_many :reviews, dependent: :destroy > has_many :reviewed_games, :through => :reviews, :source => :games > > game.rb > has_many :reviews > has_many :authors, :through => :reviews, :source => :users > > review.rb > belongs_to :user > belongs_to :game > > This is my review controller > def create > @game = Game.find_by_id(params[:game_id]) > @review = current_user.reviews.build(params[:review]) > @review.game_id = @game.id > @review.user_id = current_user.id > > if @review.save > flash[:success] = "review created!" > redirect_to @review > else > render ''new'' > end > end > > And my Form > <%= form_for(@review) do |f| %> > <div class="field"> > <%= f.text_area :content, placeholder: "Compose new review..." %> > </div> > <%= hidden_field_tag("game_id", @game.id) %> > <%= f.submit "Post", class: "btn btn-large btn-primary" %> > <% end %> > > The Runtime Error occurs, once I try to open the reviews/new url. When I > dismiss the hidden_field_tag, I receive the review form, but now posting > causes the exact same error (because of the game.id in the create > method).The error message should tell you which line of code is causing the error. The problem is that whatever you are calling .id on at that line of code is nil. Have a look at the Rails Guide on Debugging and it will show you techniques that you can use to debug your code. Colin -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
All right, thanks for pointing that out. I simply used <%= debug @review %> in my new-View of the reviews controller. Revieweing a game works by clicking on the "review" button in "game#show". So having <%= debug @review %> in game#show, game_id receives it''s proper id, but once I open the new Form (which is the url reviews/new) there is no number behind the reviews game_id. So what can I do about it? I guess I have to modify my Routings, because rating works directly on game#show, while reviewing opens it''s own page. how do I pass the game ID to the review model in my routes? So far all I have is "resources :reviews" :/ -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
On 16 April 2013 12:22, Ryo Saeba <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> All right, thanks for pointing that out. > > I simply used > <%= debug @review %> > > in my new-View of the reviews controller. > > Revieweing a game works by clicking on the "review" button in > "game#show". > > So having <%= debug @review %> in game#show, game_id receives it''s > proper id, but once I open the new Form (which is the url reviews/new) > there is no number behind the reviews game_id.Sorry I don''t know what you mean by that. Note that a url does not open a form, it runs an action, which may then show a view with a new form. When explaining a problem it is important to explain exactly where the problem lies and if necessary show the problem code. Not all the code just the small part that is not doing what you expect. Colin -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
All right. the show view of a single game has the url (games/:id). when I pste "debug @review" in the show view, it says that the review game_id has the id of the current game shown. Opening the review Form (which is the "new Method of the review controller), the debug result shows, that now there is no game_id for the review, because I''m opening a form, that is not associated to the game, but simply looks like this "localhost:3000/reviews/new"...so the form doesn''t know which game_id the review should belong to. So I need to route the review form to the game where I opened the review form. This means that a url needs to be created like this "localhost:3000/games/4/reviews/new". How do I do that? I tried the approach with nested resources, like this resources :games do member do :reviews end end but now my helper methods like "new_review_path" are not working. I hope you understand what my problem is and can give me a hint about routing. I appreciate any kind of help! -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
On Tue, Apr 16, 2013 at 8:04 AM, Ryo Saeba <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> I tried the approach with nested resources, like this > > resources :games do > member do > :reviews > end > end > > but now my helper methods like "new_review_path" are not working.Why would you expect them to? Run `rake routes` to see what your paths look like with nested resources. -- Hassan Schroeder ------------------------ hassan.schroeder-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org http://about.me/hassanschroeder twitter: @hassan -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
oh you are right of course. well rake routes shows following: reviews_game GET /games/:id/reviews(.:format) games#reviews but I''m still confused, because this is the only route associated to my reviews, but shouldn''t there be routes for "new" and "show" and "edit"? I thought I created a nested resource!? also using the helper method "reviews_game_path" now causes me an unknown action. I think i''m on the right way but I''m still missing out on something. I still have to learn a lot about routes. So can I simply replace the ":reviews" with several "match" lines? Or do I actually need something else than "member"? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
Update: Allright I tried this resources :games do member do get :followers end resources :reviews end (the member is for following purposes and has nothing to do with reviews) Now paths like "new_game_review_path" are generated, but now when I want to open a view, that contains this helper path, I get this routing error: No route matches {:action=>"new", :controller=>"reviews"} now what kind of method does my review controller need? or should I adjust my routings a little bit more? But I thought every method in the reivew controller should be available with these routings :/ -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
Allright I fixed this problem to. my helper path simply needed the game parameter new_game_review_path(@game) The form for creating a new review looks now like this <%= form_for(@review, :url => game_reviews_path(@game)) do |f| %> But unfortunately I end up with the same problem. the game object is still nil and I can''t get the game_id :/ having this hidden_field_tag in my form causes me the "object is nil" error <%= hidden_field_tag("game_id", @game.id) %> I thought the games id would automatically be passed to its nested resource, once I got my routings right, but I still can''t pass the game objects id to my review table :/ -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
On 17 April 2013 12:37, Ryo Saeba <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Allright I fixed this problem to. my helper path simply needed the game > parameter > > new_game_review_path(@game) > > > The form for creating a new review looks now like this > > <%= form_for(@review, :url => game_reviews_path(@game)) do |f| %> > > > But unfortunately I end up with the same problem. the game object is > still nil and I can''t get the game_id :/ > > having this hidden_field_tag in my form causes me the "object is nil" > error > > <%= hidden_field_tag("game_id", @game.id) %>Do you mean @game is nil? In that case you are not setting it up in the controller. Colin> > I thought the games id would automatically be passed to its nested > resource, once I got my routings right, but I still can''t pass the game > objects id to my review table :/ > > -- > Posted via http://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. > To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit https://groups.google.com/groups/opt_out. > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
my controller looks like this def create @game = Game.find_by_id(params[:id]) @review = current_user.reviews.build(params[:review]) @review.game_id = @game.id @review.user_id = current_user.id if @review.save flash[:success] = "review created!" redirect_to @review else render ''new'' end end def new @review = Review.new(params[:review]) end but it seams that @game can''t be located in the url "localhost:3000/games/1/reviews/new" even though I think I set the form path correct In "reviews#new" the game object still seems to be unknown :/ -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.