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?
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.