2017-12-02 60 views
1

私はこのテーブルを持っています。定義されていないメソッド `destroy 'をnilにする:NilClass Rails

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を取得することを確認してください。

ソースコードを見ると、各行が対応する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 

私は、エラーメッセージから、その情報が何も見つかりませんでした。私はエラーメッセージでこれも取得しています。

要求

パラメータ:

{ "ID" => "6"}私はGROUP_IDを削除しようとしているグループのため

しかしパラメータで6あり、それ明らかに 'id'が6であると言っています。これはルーティングの問題でしょうか?これは、レコードを削除するために設定した現在のルートです。

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

これはルーティングの問題であるならば、私はこれが正常にレコードを削除するために修正するために何が必要なのでしょうか?誰か助けてくれますか? Railsのルーティングは私にとって紛らわしいものです。

+0

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

あなたがルートをsettedたい場合、それは少ないコードになるだろうgroup_id = "6" user_id = "2" 'の属性として使用され、唯一のパラメータはルート'/groups/remove/6'で認識されるIDです。結果が得られず、最初も破棄方法も利用できません。 'user_groups_path(group_id:@ group.id、user_id:user.id) 'のように、パスを使用してidを渡してみてください。 –

答えて

0

中括弧内のそれぞれのIDをラップしてみてください。あなたが渡しているこれらの値は単にある

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

追加する場合、正しいルートは何でしょうか?私は可能な限り小さなコードを使用したいと思います。それは途中で働いた。 –

+1

あなたはグループのためのリソースルートを定義しましたか?あなたがしなかったIDは、 'delete '/ groups /:id'のようにdestroyメソッドの新しいルートを作成するだけで、 'groups#remove' :destroy_group'、そのルートを 'destroy_group_path(group_id:@group、user_id:user)'として参照してください。オブジェクトを渡すだけで、Railsはid属性を推測します。 –

関連する問題