未定义的方法`destroy'为零:NilClass Rails

时间:2017-12-02 18:44:18

标签: ruby-on-rails routing

我有这个表有很多关系。

create_table "usergroups", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
  t.bigint "user_id"
  t.bigint "group_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.index ["group_id"], name: "index_usergroups_on_group_id"
  t.index ["user_id"], name: "index_usergroups_on_user_id"
end

要销毁此表中的记录,我已经提出了以下方法来执行此操作。

def remove
  @usergroup = Usergroup.where('user_id = ?', params[:user_id]).where('group_id = ?', params[:group_id]).first.destroy
  redirect_to groups_path
end

这是一个表,所以我确保获取每行的group_id和user_id以删除用户选择的正确行。

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

如果我查看源代码,我可以看到每一行都获得了相应的user_id和group_id。

<a group_id="6" user_id="2" data-confirm="Are you sure?" href="/groups/remove/6">Remove</a>

目前,当我尝试删除此内容时,我收到以下错误。

undefined method `destroy' for nil:NilClass

我知道,从错误消息中,它没有找到包含该信息的任何内容。我也在错误信息中得到这个。

  

请求

     

参数:

     

{&#34; ID&#34; = GT;&#34; 6&#34;}

对于我试图删除group_id的群组是6但是在参数中它明确地说是&#39; id&#39;是6.也许这是一个路由问题?这是我设置删除记录的当前路线。

get 'groups/remove/:id', to: 'groups#remove'

如果这是路由问题,我需要修复什么才能成功删除记录?有人可以帮帮我吗? Rails路由对我来说很困惑。

1 个答案:

答案 0 :(得分:0)

尝试在花括号内包装相应的ID:

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

如果你设置了一条路线,那就更少了代码:

<%= link_to 'Remove', 
  groups_path(group_id: @group.id, user_id: user.id),
  data: { confirm: 'Are you sure?' } %>