2

我在控制器中创建了一个新操作 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}

知道我在这里想念什么吗?我在这里尝试了答案,但这并没有成功。

谢谢

4

1 回答 1

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' %>
于 2013-05-09T16:49:19.583 回答