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.