Rails错误的参数数量(给定0,预期1)

时间:2017-11-26 22:28:47

标签: ruby-on-rails

我在groups控制器中使用此方法。

def remove
  @usergroup = Usergroup.where(group_id: params[:group_id]).destroy
  redirect_to groups_path
end

并且

<%= link_to 'Remove', { controller: "groups", action: "remove" },
    group_id: @group.id, data: { confirm: 'Are you sure?' } %>

当我点击删除并确认删除时,我收到此错误。

enter image description here

我有点困惑,因为该组的ID是6,它应该是。对于小组我试图删除某人。为什么它会给我一个没有参数错误呢?

这是我设定的路线。我相信这是个问题。 get 'groups/remove/:id', to: 'groups#remove'

4 个答案:

答案 0 :(得分:0)

不确定这是否是问题,但是您将变量设置为已销毁的内容

答案 1 :(得分:0)

我认为是因为你使用where,你试图在对象列表上调用destroy,因为当你调用ActiveRecord .where时,即使只有一个列表,它也会返回一个列表。您应该尝试这样做:

@group = Usergroup.find_by(group_id: params[:group_id])
if @group
  @group.destroy
...

并使你的link_to像这样:

<%= link_to 'Remove', name_of_path_here_path(group_id: @group.id), confirm: 'Are you sure?', method: :delete %>

另外,请记住,您可以使用Rails中常用的Restful路由模式: routes.rb (例如:resources :usergroups)。您还可以使用as: :name_of_route_here别名路由。要仔细检查您的路线,您可以打开终端并运行bundle exec rake routes,路线的左栏是路线助手的名称。希望这可以帮助。

答案 2 :(得分:0)

当您正在使用- (NSOperationQueue *)queue { if (_queue == nil) { _queue = [NSOperationQueue mainQueue]; [_queue setMaxConcurrentOperationCount:1]; } return _queue; } 并返回where时,您需要&#34;识别&#34;你要销毁的对象,访问单数元素,你可以通过访问结果中的特定元素来实现,如:

Model::ActiveRecord_Relation

或者使用Usergroup.where('group_id = ?', params[:group_id]).first.destroy ,它将获取该结果中的所有对象并销毁所有这些对象:

destroy_all

答案 3 :(得分:0)

你的参数是id = 6而不是group_id = 6