我有一个Rails 4应用程序,它是一个游戏数据库。与此问题相关的模型是:
它有一个游戏/新表单,可以创建新的游戏记录。
在该表单中,我想要一个允许用户添加流派的子表单。我认为它的工作原理如下:
Genre.all
add_genre
函数为每个类型创建GameGenre
关系记录。这是我目前的games/new.html.erb
观看代码:
<div id="game-genres-form">
<%= fields_for(@game.game_genres.build) do |f| %>
<div><%= hidden_field_tag :game_id, @game.id %></div>
<div class="form-group">
<%= f.label :genre_id, "Add a genre" %>
<div class="input-group">
<%= f.collection_select :genre_id, Genre.all, :id, :name,
{}, {:class=>'form-control'} %>
<span class="input-group-btn">
<%= f.submit "Add", class: "btn btn-default" %>
</span>
</div>
<% end %>
</div>
这不起作用,因为fields_for(@game.game_genres.build)
不正确。事实上,目前当我点击“添加”时,它会提交新游戏表单并创建一个游戏记录,但不会添加该类型。
我认为我需要知道的是,我使用什么代替fields_for(@game.game_genres.build)
将提交的类型传递给新数组?我如何在games_controller.rb
?
我意识到<div><%= hidden_field_tag :game_id, @game.id %></div>
没有必要(因为game_id
在新游戏记录保存之前不存在)。
我希望我有意义,谢谢你的帮助。
这些是我目前的关联,他们缺少accepts_nested_attributes_for
。我现在不太担心这个问题 - 我主要想知道正确使用的表单类型,以及如何使每个类型添加到散列/数组。
class Game < ActiveRecord::Base
belongs_to :user
has_many :game_genres, foreign_key: :game_id,
dependent: :destroy
has_many :genres, through: :game_genres
class GameGenre < ActiveRecord::Base
belongs_to :game
belongs_to :genre
class Genre < ActiveRecord::Base
belongs_to :user
has_many :game_genres, foreign_key: :genre_id,
dependent: :destroy
has_many :games, through: :game_genres
答案 0 :(得分:0)
可能你在游戏模型中遗漏了这样的东西
accepts_nested_attributes_for :game_genres ,allow_destroy: true
或者您可以尝试将此类型保存在视图中
<%= collection_select(:category, :ids, Category.all, :id, :category, { :selected => @categories.map{|m| m.id}}, {:multiple=>true}) %>