我在我的控制器中创建了一个新动作,groups_controller.rb
def add_member
@group = Group.find(params[:id])
@user = User.find(params[:user])
@group.add_member(@user)
redirect_to :back
end
在group.rb中,add_member定义为:
def add_member(user)
self.working_groups.build(:user_id => user.id, :position => self.users.count, :role => 'member')
self.save
end
我也创建了相应的路线:
resources :groups do
member do
get 'add_member'
end
end
所以当我做rake路线时,我得到:
add_member_group GET /groups/:id/add_member(.:format) groups#add_member
因此,当我在Show模板上使用它时,它可以正常工作
<%= link_to "Join", add_member_group_path(:user =>current_user.id, :group=> invitation.group.id) , :class => 'btn-primary' %>
但是当我尝试在索引模板中使用相同的链接时,出现了路由错误:
ActionController::RoutingError at /groups
No route matches {:action=>"add_member", :controller=>"groups", :user=>1, :group=>12}
知道我在这里缺少什么吗?我尝试了答案here,但这并没有成功。
由于
答案 0 :(得分:2)
您的路线需要id
参数,而您不提供参数。您只提供user
和group
。
在show
视图中,您的参数中已经有id
,因此可以重复使用。
在index
视图中,您没有id
,因此Rails表示无法找到您的路线,因为它错过了id
。
你应该写下这样的链接:
<%= link_to "Join", add_member_group_path(:user =>current_user.id, :id=> invitation.group.id) , :class => 'btn-primary' %>
或者像这样:
<%= link_to "Join", add_member_group_path(invitation.group, :user =>current_user.id) , :class => 'btn-primary' %>