ruby-on-rails - link_to 和 destroy 方法
问题描述
我有一个应用程序,您可以在其中将游戏(通过 API 找到)添加到用户的库中,但我也希望用户从库中删除游戏。但是,我不确定我是否使用了正确的 link_to 路径,或者问题是否出在我的控制器上。
路线
Rails.application.routes.draw do
get 'library_game/index'
devise_for :users
root to: 'pages#home'
get '/games', to: 'games#index', as: :index
get '/user/:id', to: 'user#show'
resource :user, only: [] do
resources :games, only: [:create, :destroy]
end
get '/user/:id/library', to: 'library#index', as: :library
post '/user/:id/library', to: 'games#create', as: :create
delete 'user/:id/library', to: 'games#destroy', as: :destroy
end
我的游戏模型
class Game < ApplicationRecord
has_many :library_games
has_many :libraries, through: :library_games
has_many :users, through: :libraries
serialize :data
attr_accessor :game_id
def fetch_data
game = GiantBomb::Game.detail(game_id)
self.data = Hash[game.instance_variables.map { |var| [var.to_s[1..-1], game.instance_variable_get(var)] } ]
end
def to_giant_bomb_game
GiantBomb::Game.new(data)
end
end
我要删除的链接地址:
<%= link_to 'Remove from library', destroy_path(current_user, game_id: game.id), method: :delete %>
我的销毁控制器方法:
def destroy
current_user.games.where(game_id: params[:id]).destroy_all
redirect_to library_path
end
就我现在所拥有的,我收到了这个错误:ActiveRecord::StatementInvalid in GamesController#destroy PG::UndefinedColumn: ERROR: column games.game_id does not exist
所以这个错误引发了控制器的问题,但我想知道真正的罪魁祸首是否是我的 link_to 没有传递正确的数据。我应该将什么传递给我的 link_to?
解决方案
如果连接是LibraryGame
(因为它有 alibrary_id
和 a game_id
)那么这个
resource :user, only: [] do
resources :games, only: [:create, :destroy]
end
需要是
resources :users, only: [] do
resources :library_games, only: [:create, :destroy], shallow: true
end
,shallow: true
为您提供诸如users/1/library_games/x
index、create 和 new 之类的路由,但为您提供诸如library_games/x
show、edit、update 和 destroy 之类的路由。两全其美。
然后你的链接将是<%= link_to "Remove from Library", library_game_path(library_game), method: :delete %>
.
推荐阅读
- reactjs - CORS 问题 React Axios
- haskell - 如何在字符串haskell中实现占位符
- python - 表单未在 django 中显示
- javascript - SetInterval 在 Kindle 和 Kobo 浏览器中不起作用
- ruby-on-rails - 如何在graphql ruby中获取连接类型的字段参数
- c - 如何将新设备添加到板初始化代码 linux 内核
- google-cloud-platform - 从 Google Storage 公共 URL 中删除“X-Content-Type-Options: nosniff”标头
- python - 如何为 SARIMA 设置订单和季节性参数
- rust - 参数位置中的 dyn Trait 是什么意思?
- android - 是否可以在 Firestore 中将 POJO 对象转换为 DocumentSnapshot?