Reputation: 2645
I have my models setup as follows:
class User
has_many :memberships, :dependent => :destroy
has_many :groups, :through => :memberships
Class Group
has_many :memberships, :dependent => :destroy
has_many :users, :through => :memberships
Class Membership
attr_accessible :user_id, :group_id
belongs_to :user
belongs_to :group
My MembershipController#create
def create
@membership = current_user.memberships.build(:group_id => params[:group_id])
if @membership.save
flash[:notice] = "You have joined this group."
redirect_to :back
else
flash[:error] = "Unable to join."
redirect_to :back
end
end
I have resources :memberships in my routes so that it can find the create action.
Finally in my Group#show action I want a user to be able to join a group. So I created this form_tag
<%= form_tag(membership_path) do %>
<%= hidden_field_tag @group.id %>
<%= submit_tag "Join Group"%>
<% end %>
This returns the following error:
Routing Error
No route matches [POST] "/memberships/1"
I have run a rake routes to try and understand what I am missing here:
memberships GET /memberships(.:format) {:action=>"index", :controller=>"memberships"} POST/memberships(.:format) {:action=>"create", controller=>"memberships"} new_membership GET /memberships/new(.:format) {:action=>"new",controller=>"memberships"} edit_membership GET /memberships/:id/edit(.:format){:action=>"edit", controller=>"memberships"}
membership GET /memberships/:id(.:format) {:action=>"show", :controller=>"memberships"} PUT /memberships/:id(.:format){:action=>"update", :controller=>"memberships"} DELETE /memberships/:id(.:format) {:action=>"destroy", :controller=>"memberships"}
Anyone see the error of my ways?
Upvotes: 0
Views: 394
Reputation: 713
the path is "new_membership" right? new_membership_path if you are doing a form_tag.Or you can always use a form_for and render it through a partial in your view.
Upvotes: 0
Reputation: 324
Don't you want to be posting to memberships_path rather than membership_path? It looks like the error is indicating it can't find a POST route for a membership due to the fact that there is actually no route for :membership for POST, :only memberships.
Upvotes: 1
Reputation: 11460
My quick glance at this; shouldn't <%= form_tag(membership_path) do %>
be <%= form_tag(@membership) do %>
'or <%= form_tag(membership_path(@membership)) do %>
.
Upvotes: 0