私はこのテーブルを持っています。定義されていないメソッド `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のルーティングは私にとって紛らわしいものです。
:
あなたがルートをsettedたい場合、それは少ないコードになるだろうgroup_id = "6" user_id = "2" 'の属性として使用され、唯一のパラメータはルート'/groups/remove/6'で認識されるIDです。結果が得られず、最初も破棄方法も利用できません。 'user_groups_path(group_id:@ group.id、user_id:user.id) 'のように、パスを使用してidを渡してみてください。 –