Hi Everyone, I''ve been teaching myself Ruby on Rails while trying to build a new website I want to launch in the next few weeks. I''ve gotten pretty far, but I''ve hit a wall this week and I can''t seem to get around it. I''ve been trying to implement a friends feature, allowing people to add, edit and delete friends as they see fit. I''ve been following the example set in the book "Practical Rails, Social Networking Sites" by Alan Bradburne, and it''s been a big help, but since the particulars of my application are different, I''ve had to do some adjusting of the code to make it fit. Right now, I have no problem logging in as one user, and viewing other users'' profiles. From there, I can tag a user as a "friend". I can go to my friends list, and choose to edit their information, which is basically their XFN info. However, when I click on "Edit Friendship", I get the above error, ActionController::RoutingError. I just can''t seem to get around it. This is the full error I''m receiving: ----------------------------------------------------------------- ActionController::RoutingError in Friends#edit Showing app/views/friends/edit.rhtml where line #8 raised: user_friend_url failed to generate from {:user_id=>#<User:0x2380ef8 @attributes={"last_login_at"=>nil, "authorization_token"=>nil, "updated_at"=>"2007-12-12 14:44:02", "zip"=>"000000", "last_activity"=>"added a location", "hashed_password"=>"06f74df4f98d3b187eaa74a059c7c537d34dc1d1f8bc9cd7a2ae9d8ad7804e2d", "last_activity_at"=>"2007-12-12 14:44:02", "username"=>"Administrator", "lng"=>nil, "website"=>"http:// www.example.com", "enabled"=>"1", "id"=>"1", "lat"=>nil, "created_at"=>"2007-12-06 13:53:35", "email"=>"admin-hcDgGtZH8xPR7s880joybQ@public.gmane.org"}>, :controller=>"friends", :action=>"show", :friend_id=>#<User: 0x23005f0 @attributes={"last_login_at"=>nil, "authorization_token"=>nil, "updated_at"=>"2007-12-10 18:41:07", "zip"=>"00000", "last_activity"=>nil, "hashed_password"=>"5d835050184bcbd2b14c2359bceb6daf42ec10e0123e19c5e9afaeb5cf6e8f27", "last_activity_at"=>nil, "username"=>"member", "lng"=>"-70", "website"=>"http://www.cnn.org", "enabled"=>"1", "id"=>"2", "lat"=>"41", "created_at"=>"2007-12-10 18:41:07", "email"=>"jon-hcDgGtZH8xNAfugRpC6u6w@public.gmane.org"}>}, expected: {:controller=>"friends", :action=>"show"}, diff: {:user_id=>#<User: 0x2380ef8 @attributes={"last_login_at"=>nil, "authorization_token"=>nil, "updated_at"=>"2007-12-12 14:44:02", "zip"=>"00000", "last_activity"=>"added a location", "hashed_password"=>"06f74df4f98d3b187eaa74a059c7c537d34dc1d1f8bc9cd7a2ae9d8ad7804e2d", "last_activity_at"=>"2007-12-12 14:44:02", "username"=>"Administrator", "lng"=>nil, "website"=>"http:// www.example.com", "enabled"=>"1", "id"=>"1", "lat"=>nil, "created_at"=>"2007-12-06 13:53:35", "email"=>"admin-hcDgGtZH8xPR7s880joybQ@public.gmane.org"}>, :friend_id=>#<User:0x23005f0 @attributes={"last_login_at"=>nil, "authorization_token"=>nil, "updated_at"=>"2007-12-10 18:41:07", "zip"=>"02338", "last_activity"=>nil, "hashed_password"=>"5d835050184bcbd2b14c2359bceb6daf42ec10e0123e19c5e9afaeb5cf6e8f27", "last_activity_at"=>nil, "username"=>member", "lng"=>"-70", "website"=>"http://www.cnn.org", "enabled"=>"1", "id"=>"2", "lat"=>"41", "created_at"=>"2007-12-10 18:41:07", "email"=>"jon-hcDgGtZH8xNAfugRpC6u6w@public.gmane.org"}>} Extracted source (around line #8): 5: 6: <% form_for(:friendship, 7: :url => user_friend_path(:user_id => @logged_in_user, 8: :friend_id => @friend), 9: :html => { :multipart => true, :method => :put}) do |f| %> 10: <p> 11: Define your relationship with <strong><%= @friend.username %></strong> ----------------------------------------------------- if I change line 7 and 8 to read @logged_in_user.id and @friend.id, the error message is much shorter, but still the same: ----------------------------------------------------- user_friend_url failed to generate from {:user_id=>1, :controller=>"friends", :action=>"show", :friend_id=>2}, expected: {:controller=>"friends", :action=>"show"}, diff: {:user_id=>1, :friend_id=>2} ----------------------------------------------------- This is the edit function from my friends_controller: def edit @user = User.find(logged_in_user) @friendship = @user.friendships.find_by_friend_id(params[:id]) @friend = @friendship.friend if @friendship if !@friendship redirect_to user_friend_path(:user_id => logged_in_user, :id => params[:id]) end end --------------- in my friendship model file, I have this as well: belongs_to :user belongs_to :friend, :class_name => ''User'', :foreign_key => ''friend_id'' in my user''s model, I have this: has_many :friendships has_many :friends, :through => :friendships, :class_name => ''User'' -------------- in my routes.rb file, I have this: map.resources :users, :member => {:enable => :put} do |users| users.resources :roles users.resources :friends users.resources :tags, :name_prefix => ''user_'', :controller => ''user_tags'' end ---------------- I did notice, that if in the form_for part of my edit template, I change the user_friend_path to user_friends_path, the page will load, but if I go to save the changes, I get this error message: Unknown action No action responded to 1 with this link in the address bar: http://localhost:3000/users/1/friends?friend_id=2 and this in the terminal: Processing UsersController#1 (for 127.0.0.1 at 2007-12-14 14:28:48) [PUT] Session ID: 003df0e09ed24a6fe2e93e946a8ae9e7 Parameters: {"commit"=>"Save", "friendship"=>{"xfn_met"=>"1", "xfn_friendship"=>"xfn_contact", "xfn_family"=>"xfn_child", "xfn_sweetheart"=>"0", "xfn_geographical"=>"xfn_coresident", "xfn_crush"=>"0", "xfn_date"=>"0", "xfn_muse"=>"1", "xfn_coworker"=>"1", "xfn_colleague"=>"0"}, "_method"=>"put", "action"=>"1", "id"=>"friends", "controller"=>"users", "friend_id"=>"2"} ActionController::UnknownAction (No action responded to 1): ------------------------------ now, if above should be edit_friends_path instead of edit_friend_path, the issue above is that it''s using the user''s controller instead of the friend''s controller. but I''m not sure how to resolve that. I know this is long, and I really appreciate any help you could provide, if you need any more code posted, I''d be happy to. I''ve been working on this since wednesday, and I just can''t wrap my head around it. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Here''s my theory: @friend = @friendship.friend if @friendship prevents @friend from ever getting set because the @friendship variable is nil. Then, when you try to create you form with: 6: <% form_for(:friendship, 7: :url => user_friend_path(:user_id => @logged_in_user, 8: :friend_id => @friend), 9: :html => { :multipart => true, :method => :put}) do |f| %> it pukes because :friend_id is being set to a nil value. Test it out by hard-coding a valid friend id in (so you would have :friend_id => 1 instead of :friend_id => @friend). If it works with a valid friend id there, then my theory was right. On Dec 14, 12:37 pm, naevity <jonathan.mulc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi Everyone, > > I''ve been teaching myself Ruby on Rails while trying to build a new > website I want to launch in the next few weeks. I''ve gotten pretty > far, but I''ve hit a wall this week and I can''t seem to get around it. > I''ve been trying to implement a friends feature, allowing people to > add, edit and delete friends as they see fit. I''ve been following the > example set in the book "Practical Rails, Social Networking Sites" by > Alan Bradburne, and it''s been a big help, but since the particulars of > my application are different, I''ve had to do some adjusting of the > code to make it fit. > > Right now, I have no problem logging in as one user, and viewing other > users'' profiles. From there, I can tag a user as a "friend". I can go > to my friends list, and choose to edit their information, which is > basically their XFN info. However, when I click on "Edit Friendship", > I get the above error, ActionController::RoutingError. I just can''t > seem to get around it. This is the full error I''m receiving: > > ----------------------------------------------------------------- > ActionController::RoutingError in Friends#edit > > Showing app/views/friends/edit.rhtml where line #8 raised: > > user_friend_url failed to generate from {:user_id=>#<User:0x2380ef8 > @attributes={"last_login_at"=>nil, "authorization_token"=>nil, > "updated_at"=>"2007-12-12 14:44:02", "zip"=>"000000", > "last_activity"=>"added a location", > "hashed_password"=>"06f74df4f98d3b187eaa74a059c7c537d34dc1d1f8bc9cd7a2ae9d8ad7804e2d", > "last_activity_at"=>"2007-12-12 14:44:02", > "username"=>"Administrator", "lng"=>nil, "website"=>"http://www.example.com", "enabled"=>"1", "id"=>"1", "lat"=>nil, > "created_at"=>"2007-12-06 13:53:35", > "email"=>"ad...-hcDgGtZH8xPR7s880joybQ@public.gmane.org"}>, :controller=>"friends", :action=>"show", :friend_id=>#<User: > 0x23005f0 @attributes={"last_login_at"=>nil, > "authorization_token"=>nil, "updated_at"=>"2007-12-10 18:41:07", > "zip"=>"00000", "last_activity"=>nil, > "hashed_password"=>"5d835050184bcbd2b14c2359bceb6daf42ec10e0123e19c5e9afaeb5cf6e8f27", > "last_activity_at"=>nil, "username"=>"member", "lng"=>"-70", > "website"=>"http://www.cnn.org", "enabled"=>"1", "id"=>"2", > "lat"=>"41", "created_at"=>"2007-12-10 18:41:07", > "email"=>"j...-hcDgGtZH8xNAfugRpC6u6w@public.gmane.org"}>}, expected: > {:controller=>"friends", :action=>"show"}, diff: {:user_id=>#<User: > 0x2380ef8 @attributes={"last_login_at"=>nil, > "authorization_token"=>nil, "updated_at"=>"2007-12-12 14:44:02", > "zip"=>"00000", "last_activity"=>"added a location", > "hashed_password"=>"06f74df4f98d3b187eaa74a059c7c537d34dc1d1f8bc9cd7a2ae9d8ad7804e2d", > "last_activity_at"=>"2007-12-12 14:44:02", > "username"=>"Administrator", "lng"=>nil, "website"=>"http://www.example.com", "enabled"=>"1", "id"=>"1", "lat"=>nil, > "created_at"=>"2007-12-06 13:53:35", > "email"=>"ad...-hcDgGtZH8xPR7s880joybQ@public.gmane.org"}>, :friend_id=>#<User:0x23005f0 > @attributes={"last_login_at"=>nil, "authorization_token"=>nil, > "updated_at"=>"2007-12-10 18:41:07", "zip"=>"02338", > "last_activity"=>nil, > "hashed_password"=>"5d835050184bcbd2b14c2359bceb6daf42ec10e0123e19c5e9afaeb5cf6e8f27", > "last_activity_at"=>nil, "username"=>member", "lng"=>"-70", > "website"=>"http://www.cnn.org", "enabled"=>"1", "id"=>"2", > "lat"=>"41", "created_at"=>"2007-12-10 18:41:07", > "email"=>"j...-hcDgGtZH8xNAfugRpC6u6w@public.gmane.org"}>} > Extracted source (around line #8): > > 5: > 6: <% form_for(:friendship, > 7: :url => user_friend_path(:user_id => @logged_in_user, > 8: :friend_id => @friend), > 9: :html => { :multipart => true, :method => :put}) do |f| %> > 10: <p> > 11: Define your relationship with <strong><%= @friend.username > %></strong> > > ----------------------------------------------------- > > if I change line 7 and 8 to read @logged_in_user.id and @friend.id, > the error message is much shorter, but still the same: > > ----------------------------------------------------- > > user_friend_url failed to generate from > {:user_id=>1, :controller=>"friends", :action=>"show", :friend_id=>2}, > expected: {:controller=>"friends", :action=>"show"}, diff: > {:user_id=>1, :friend_id=>2} > > ----------------------------------------------------- > > This is the edit function from my friends_controller: > > def edit > @user = User.find(logged_in_user) > @friendship = @user.friendships.find_by_friend_id(params[:id]) > @friend = @friendship.friend if @friendship > if !@friendship > redirect_to user_friend_path(:user_id => logged_in_user, :id => > params[:id]) > end > end > > --------------- > in my friendship model file, I have this as well: > > belongs_to :user > belongs_to :friend, :class_name => ''User'', :foreign_key => > ''friend_id'' > > in my user''s model, I have this: > > has_many :friendships > has_many :friends, :through => :friendships, :class_name => ''User'' > -------------- > > in my routes.rb file, I have this: > > map.resources :users, :member => {:enable => :put} do |users| > users.resources :roles > users.resources :friends > users.resources :tags, :name_prefix => ''user_'', > :controller => ''user_tags'' > end > > ---------------- > > I did notice, that if in the form_for part of my edit template, I > change the user_friend_path to user_friends_path, the page will load, > but if I go to save the changes, I get this error message: > > Unknown action > > No action responded to 1 > > with this link in the address bar:http://localhost:3000/users/1/friends?friend_id=2 > > and this in the terminal: > > Processing UsersController#1 (for 127.0.0.1 at 2007-12-14 14:28:48) > [PUT] > Session ID: 003df0e09ed24a6fe2e93e946a8ae9e7 > Parameters: {"commit"=>"Save", "friendship"=>{"xfn_met"=>"1", > "xfn_friendship"=>"xfn_contact", "xfn_family"=>"xfn_child", > "xfn_sweetheart"=>"0", "xfn_geographical"=>"xfn_coresident", > "xfn_crush"=>"0", "xfn_date"=>"0", "xfn_muse"=>"1", > "xfn_coworker"=>"1", "xfn_colleague"=>"0"}, "_method"=>"put", > "action"=>"1", "id"=>"friends", "controller"=>"users", > "friend_id"=>"2"} > > ActionController::UnknownAction (No action responded to 1): > > ------------------------------ > > now, if above should be edit_friends_path instead of edit_friend_path, > the issue above is that it''s using the user''s controller instead of > the friend''s controller. but I''m not sure how to resolve that. > > I know this is long, and I really appreciate any help you could > provide, if you need any more code posted, I''d be happy to. I''ve been > working on this since wednesday, and I just can''t wrap my head around > it.--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks for the fast idea, I tried changing the edit.rhtml file to include :friend_id => 2, which is a valid id, but I still get the same error as before. I also tried changing the user_friend_path to user_friends_path, but I still get the same error as above too. Something that just popped into my mind, the error message above has all the attributes of the user, not the friend properties. I would think that since the form is trying to load the friend attributes, but it has the user attributes that would fail as well. but I could be wrong :) On Dec 14, 3:11 pm, Matt White <whit...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Here''s my theory: > > @friend = @friendship.friend if @friendship > > prevents @friend from ever getting set because the @friendship > variable is nil. Then, when you try to create you form with: > > 6: <% form_for(:friendship, > 7: :url => user_friend_path(:user_id => > @logged_in_user, > 8: :friend_id > => @friend), > 9: :html => { :multipart => true, :method > => :put}) do |f| %> > > it pukes because :friend_id is being set to a nil value. Test it out > by hard-coding a valid friend id in (so you would have :friend_id => 1 > instead of :friend_id => @friend). If it works with a valid friend id > there, then my theory was right. > > On Dec 14, 12:37 pm, naevity <jonathan.mulc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > Hi Everyone, > > > I''ve been teaching myself Ruby on Rails while trying to build a new > > website I want to launch in the next few weeks. I''ve gotten pretty > > far, but I''ve hit a wall this week and I can''t seem to get around it. > > I''ve been trying to implement a friends feature, allowing people to > > add, edit and delete friends as they see fit. I''ve been following the > > example set in the book "Practical Rails, Social Networking Sites" by > > Alan Bradburne, and it''s been a big help, but since the particulars of > > my application are different, I''ve had to do some adjusting of the > > code to make it fit. > > > Right now, I have no problem logging in as one user, and viewing other > > users'' profiles. From there, I can tag a user as a "friend". I can go > > to my friends list, and choose to edit their information, which is > > basically their XFN info. However, when I click on "Edit Friendship", > > I get the above error, ActionController::RoutingError. I just can''t > > seem to get around it. This is the full error I''m receiving: > > > ----------------------------------------------------------------- > > ActionController::RoutingError in Friends#edit > > > Showing app/views/friends/edit.rhtml where line #8 raised: > > > user_friend_url failed to generate from {:user_id=>#<User:0x2380ef8 > > @attributes={"last_login_at"=>nil, "authorization_token"=>nil, > > "updated_at"=>"2007-12-12 14:44:02", "zip"=>"000000", > > "last_activity"=>"added a location", > > "hashed_password"=>"06f74df4f98d3b187eaa74a059c7c537d34dc1d1f8bc9cd7a2ae9d8ad7804e2d", > > "last_activity_at"=>"2007-12-12 14:44:02", > > "username"=>"Administrator", "lng"=>nil, "website"=>"http://www.example.com", "enabled"=>"1", "id"=>"1", "lat"=>nil, > > "created_at"=>"2007-12-06 13:53:35", > > "email"=>"ad...-hcDgGtZH8xPR7s880joybQ@public.gmane.org"}>, :controller=>"friends", :action=>"show", :friend_id=>#<User: > > 0x23005f0 @attributes={"last_login_at"=>nil, > > "authorization_token"=>nil, "updated_at"=>"2007-12-10 18:41:07", > > "zip"=>"00000", "last_activity"=>nil, > > "hashed_password"=>"5d835050184bcbd2b14c2359bceb6daf42ec10e0123e19c5e9afaeb5cf6e8f27", > > "last_activity_at"=>nil, "username"=>"member", "lng"=>"-70", > > "website"=>"http://www.cnn.org", "enabled"=>"1", "id"=>"2", > > "lat"=>"41", "created_at"=>"2007-12-10 18:41:07", > > "email"=>"j...-hcDgGtZH8xNAfugRpC6u6w@public.gmane.org"}>}, expected: > > {:controller=>"friends", :action=>"show"}, diff: {:user_id=>#<User: > > 0x2380ef8 @attributes={"last_login_at"=>nil, > > "authorization_token"=>nil, "updated_at"=>"2007-12-12 14:44:02", > > "zip"=>"00000", "last_activity"=>"added a location", > > "hashed_password"=>"06f74df4f98d3b187eaa74a059c7c537d34dc1d1f8bc9cd7a2ae9d8ad7804e2d", > > "last_activity_at"=>"2007-12-12 14:44:02", > > "username"=>"Administrator", "lng"=>nil, "website"=>"http://www.example.com", "enabled"=>"1", "id"=>"1", "lat"=>nil, > > "created_at"=>"2007-12-06 13:53:35", > > "email"=>"ad...-hcDgGtZH8xPR7s880joybQ@public.gmane.org"}>, :friend_id=>#<User:0x23005f0 > > @attributes={"last_login_at"=>nil, "authorization_token"=>nil, > > "updated_at"=>"2007-12-10 18:41:07", "zip"=>"02338", > > "last_activity"=>nil, > > "hashed_password"=>"5d835050184bcbd2b14c2359bceb6daf42ec10e0123e19c5e9afaeb5cf6e8f27", > > "last_activity_at"=>nil, "username"=>member", "lng"=>"-70", > > "website"=>"http://www.cnn.org", "enabled"=>"1", "id"=>"2", > > "lat"=>"41", "created_at"=>"2007-12-10 18:41:07", > > "email"=>"j...-hcDgGtZH8xNAfugRpC6u6w@public.gmane.org"}>} > > Extracted source (around line #8): > > > 5: > > 6: <% form_for(:friendship, > > 7: :url => user_friend_path(:user_id => @logged_in_user, > > 8: :friend_id => @friend), > > 9: :html => { :multipart => true, :method => :put}) do |f| %> > > 10: <p> > > 11: Define your relationship with <strong><%= @friend.username > > %></strong> > > > ----------------------------------------------------- > > > if I change line 7 and 8 to read @logged_in_user.id and @friend.id, > > the error message is much shorter, but still the same: > > > ----------------------------------------------------- > > > user_friend_url failed to generate from > > {:user_id=>1, :controller=>"friends", :action=>"show", :friend_id=>2}, > > expected: {:controller=>"friends", :action=>"show"}, diff: > > {:user_id=>1, :friend_id=>2} > > > ----------------------------------------------------- > > > This is the edit function from my friends_controller: > > > def edit > > @user = User.find(logged_in_user) > > @friendship = @user.friendships.find_by_friend_id(params[:id]) > > @friend = @friendship.friend if @friendship > > if !@friendship > > redirect_to user_friend_path(:user_id => logged_in_user, :id => > > params[:id]) > > end > > end > > > --------------- > > in my friendship model file, I have this as well: > > > belongs_to :user > > belongs_to :friend, :class_name => ''User'', :foreign_key => > > ''friend_id'' > > > in my user''s model, I have this: > > > has_many :friendships > > has_many :friends, :through => :friendships, :class_name => ''User'' > > -------------- > > > in my routes.rb file, I have this: > > > map.resources :users, :member => {:enable => :put} do |users| > > users.resources :roles > > users.resources :friends > > users.resources :tags, :name_prefix => ''user_'', > > :controller => ''user_tags'' > > end > > > ---------------- > > > I did notice, that if in the form_for part of my edit template, I > > change the user_friend_path to user_friends_path, the page will load, > > but if I go to save the changes, I get this error message: > > > Unknown action > > > No action responded to 1 > > > with this link in the address bar:http://localhost:3000/users/1/friends?friend_id=2 > > > and this in the terminal: > > > Processing UsersController#1 (for 127.0.0.1 at 2007-12-14 14:28:48) > > [PUT] > > Session ID: 003df0e09ed24a6fe2e93e946a8ae9e7 > > Parameters: {"commit"=>"Save", "friendship"=>{"xfn_met"=>"1", > > "xfn_friendship"=>"xfn_contact", "xfn_family"=>"xfn_child", > > "xfn_sweetheart"=>"0", "xfn_geographical"=>"xfn_coresident", > > "xfn_crush"=>"0", "xfn_date"=>"0", "xfn_muse"=>"1", > > "xfn_coworker"=>"1", "xfn_colleague"=>"0"}, "_method"=>"put", > > "action"=>"1", "id"=>"friends", "controller"=>"users", > > "friend_id"=>"2"} > > > ActionController::UnknownAction (No action responded to 1): > > > ------------------------------ > > > now, if above should be edit_friends_path instead of edit_friend_path, > > the issue above is that it''s using the user''s controller instead of > > the friend''s controller. but I''m not sure how to resolve that. > > > I know this is long, and I really appreciate any help you could > > provide, if you need any more code posted, I''d be happy to. I''ve been > > working on this since wednesday, and I just can''t wrap my head around > > it.--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---