Rails - 为用户添加游戏关联

时间:2016-08-23 14:35:40

标签: ruby-on-rails ruby forms ruby-on-rails-4

我正在构建用户和游戏之间的关联,用户可以将游戏收藏或关联到他们的个人资料中。但是我遇到了路线或链接的问题(我猜,也许是其他的东西)。

我在用户和游戏之间有一个联接表:

  

具有游戏ID和用户ID的Game_User

当我这样做时,协会在控制台中工作正常。

@user = User.find(session[:user_id])
@game = Game.find(params[:id])
@user.games << @game

games_controller.rb:

def favorite
  game = Game.find(params[:id])
  current_user.games << game
  flash[:notice] = 'You favorited #{@game.name}'
  redirect_to games_url
end

routes.rb

get "games" => "games#index"
post "games/:id" => 'games#favorite'

我想对我的链接做同样的事情。

以下是游戏列表,每个游戏都是喜欢它们的链接:

<% if current_user %>
    <% @games.each do |game| %>
      <tr>
        <td><%= game.name %></td>
        <td><%= game.plateform %></td>
        <td><%= game.typegame %></td>
        <td><%= link_to 'Show', game %></td>
        <td><%= link_to 'Edit', edit_game_path(game) %></td>
        <td><%= link_to 'Destroy', game, method: :delete, data: { confirm: 'Are you sure?' } %></td>
        <td>  <%= link_to "favorite", games_path, type: "favorite", method: :post %> </td>
      </tr>
    <% end %>
<% end %>

我的问题是:创建用户和游戏之间的关联,当我点击链接收藏夹时,它会生成一个新游戏(def create game.new ...)

1 个答案:

答案 0 :(得分:1)

您在games_path方法中调用了link_to,但这会给您games#create而不是favorite。您需要告诉Rails您要使用的名称,使用命名路线:post "games/:id/" => 'games#favorite', as: :favorite_game并在视图中使用favorite_game_path(game)