新路线link_to在一个地方工作但在另一个地方工作

时间:2013-05-09 16:39:27

标签: ruby-on-rails routes

我在我的控制器中创建了一个新动作,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,但这并没有成功。

由于

1 个答案:

答案 0 :(得分:2)

您的路线需要id参数,而您不提供参数。您只提供usergroup

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' %>