So I''m trying to create a facebooky kinda of site to learn rails. And so i have a User class and a micropost class. Those are simple and I know how that all works. The micropost points to its user and all that fun stuff. But then i have a feed controller where i want to display ALL the microposts and then I want to click on them to view them. I set up the feed controller to view them and all that works. But then I also want for any person to be able to "like" or "dislike" a micropost. The micropost class has a like and a dislike variable in them. So I defined a like and dislike action in the feed controller and set that all up. The way its looks is kinda like this. def like @post = Micropost.find(params[:id]) @user = User.find(@post.user_id) respond_to do |format| format.html end @user.increaseVariable(@user) @post.like_action(@post) @user.save @post.save end The routes file looks like this match "feed/:id/like" =>"feed#like" match "feed/:id/dislike" =>"feed#dislike" To me, this should all work correctly. And it did when I did the methods in the console, so i''m not worried about that. The problem is that the post will save, but the user will not. And i''m not sure why. Any thoughts? -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> def like > @post = Micropost.find(params[:id]) > @user = User.find(@post.user_id) > respond_to do |format| > format.html > end > @user.increaseVariable(@user) > @post.like_action(@post) > @user.save > @post.save > end > > The routes file looks like this > > match "feed/:id/like" =>"feed#like" > match "feed/:id/dislike" =>"feed#dislike" > > To me, this should all work correctly. And it did when I did the methods > in the console, so i''m not worried about that. The problem is that the > post will save, but the user will not. And i''m not sure why. Any > thoughts?We''d need to see the increaseVariable and like_action methods to know for sure. Until then, change those save() calls to save!() calls and see what error gets thrown... Couple of other things you may want to consider... @post = Micropost.find(params[:id]) @user = User.find(@post.user_id) could be re-written as: @post = Micropost.find(params[:id]) @user = @post.user Also, the following two lines don''t make much sense to me... @user.increaseVariable(@user) @post.like_action(@post) Why would you call a method on an object and pass the object itself into the method? You already have access to the object as ''self'' within the method... ??? And lastly, if you''re updating an integer field in the Micropost table, don''t set it and save it, but look at using increment_counter. Do NOT use incremement (it sets and saves). increment_counter will write an ''UPDATE ...'' SQL clause that update the value in the database by one directly. Good luck! -philip -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Hm, i totally forgot about the self. I''m still trying to learn ruby and everything. So the increaseVariable method looks like this. I just edited it so it could use self and so i could scale how much wanted to increase the variable. def increaseVariable(scale) tempoints = 1 * scale self.variable += tempoints logger.debug "User variable is now #{user.variable}" end so now this is what my controller looks like def like @post = Micropost.find(params[:id]) @user = @post.user_ids respond_to do |format| format.html end @user.increaseVariable(5) @post.like_action @user.save! @post.save! end So when i run it, it says that there is an undefined method for "variable" but its up in the attr_accessible. What else could be wrong? -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Nov 6, 2010, at 11:42 AM, Mark Lohstroh wrote:> Hm, i totally forgot about the self. I''m still trying to learn ruby and > everything. So the increaseVariable method looks like this. I just > edited it so it could use self and so i could scale how much wanted to > increase the variable. > > def increaseVariable(scale) > tempoints = 1 * scale > self.variable += tempoints > logger.debug "User variable is now #{user.variable}" > end > > so now this is what my controller looks like > > def like > @post = Micropost.find(params[:id]) > @user = @post.user_ids > respond_to do |format| > format.html > end > @user.increaseVariable(5) > @post.like_action > @user.save! > @post.save! > end > > So when i run it, it says that there is an undefined method for > "variable" but its up in the attr_accessible. What else could be wrong?Does your users table have a ''variable'' field? Once it''s in there you don''t need to have attr_accessible at all. Also, you''re going to have a problem if variable is nil as "nil += 5" will throw an error. So you need to either default it to zero in the database or look out for that in your model methods. -philip -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Yeah, the table includes everything needed. def self.up create_table :users do |t| t.string :name t.string :email t.integer :variable t.timestamps end end And the variable isn''t nil. I default it to 0 when i create the user. I''m still confused as to why this isn''t working... Everything goes like it should but the user just will not save itself and update the variable. Can I use the update_attributes? -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Nov 6, 7:21 pm, Mark Lohstroh <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Yeah, the table includes everything needed. > > def self.up > create_table :users do |t| > t.string :name > t.string :email > t.integer :variable > t.timestamps > end > end > > And the variable isn''t nil. I default it to 0 when i create the user. > I''m still confused as to why this isn''t working... > Everything goes like it should but the user just will not save itself > and update the variable. Can I use the update_attributes? >It doesn''t sound like it''s the saving part that is the problem, it''s how you''re manipulating the object before hand. What is on the line that throws the exception? Your controller looks a bit weird too - @post.user_ids should return an array of integers (assuming post has_many users), so trying to call on that methods you''ve presumably defined on User doesn''t make any sense Fred> -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
yeah, the @post.user_ids actually is a typo. i tried editing it but it looks like that didn''t work... it really is just @post.user_id which is the user id that the post belongs to. I was using the debugger before i was saving the @user, and the @user.variable was different. but when i saved it nothing would save. The reason i''m confused is that the post will updates its likes but the user won''t updates its variable. -- 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 post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Nov 6, 10:31 pm, Mark Lohstroh <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> yeah, the @post.user_ids actually is a typo. i tried editing it but it > looks like that didn''t work... it really is just @post.user_id which is > the user id that the post belongs to. I was using the debugger before i > was saving the @user, and the @user.variable was different. but when i > saved it nothing would save. The reason i''m confused is that the post > will updates its likes but the user won''t updates its variable.@post.user_id wouldn''t work either - that''s just an integer and won''t have all the attributes your models have. It''s also really helpful if the code posted here is actually what''s in your app, if there are typos here that aren''t in your app (and vice versa) it can be nearly impossible to work out what is going on. Fred> > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> > def increaseVariable(scale) > tempoints = 1 * scale > self.variable += tempoints > logger.debug "User variable is now #{user.variable}" > end > So when i run it, it says that there is an undefined method for > "variable" but its up in the attr_accessible. What else could be wrong?You''ll get undefined method variable for nil because user.variable should be self.variable instead. There''s no user in increaseVariable method. Cheers! Arzumy -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.