我需要创建一个进入连接表的选择标签列表。我创建了这个循环
- @game_details.fighting_game_main_characters.each do |main_character|
= simple_fields_for :combo_book_combo_works do |works|
= main_character.name
= works.input :fighting_game_main_character_id, as: :hidden,
input_html: {value: main_character.id}
= works.select :test, ["Works", "Doesn't Work", "Untested"], {},
selected: "Untested", class: "form-control"
添加它按预期显示。当我点击提交时,它不会写入连接表。我查看了日志,发现只有最后一个选择标签在提交的参数中
Parameters:
{
"utf8"=>"✓",
"combo_book_combo"=>{
"combo_book_combo_characters_attributes"=>
{"0"=>{"fighting_game_main_character_id"=>"1"}
},
"combo_type"=>"Combo",
"character_positions"=>"Ground to Ground",
"screen_position"=>"Midscreen",
"combo"=>"ô"
},
"keyboard-select"=>"",
"combo_book_combo_works"=>{
"fighting_game_main_character_id"=>"13",
"test"=>"Works"},
"commit"=>"Add combo"
}
我查看了页面源,发现所有选择都具有相同的 ID,所以我添加了
id: "combo_book_combo_works_#{main_character.id}"
但这并没有解决问题,因为它仍然没有写入连接表,所以我查看了模型
class ComboBookCombo < ApplicationRecord
has_many :combo_book_combo_characters
has_many :fighting_game_main_characters, through: :combo_book_combo_characters
has_many :combo_book_combo_assists
has_many :fighting_game_assist_characters, through: :combo_book_combo_assists
has_many :combo_book_combo_character_extras
has_many :fighting_game_main_character_extras, through: :combo_book_combo_character_extras
has_many :combo_book_combo_works
has_many :fighting_game_main_characters, through: :combo_book_combo_works
has_many :combo_book_combo_extras
has_many :fighting_game_extras, through: :combo_book_combo_extras
validates :combo, :combo_type, :character_positions, :screen_position, presence: true
accepts_nested_attributes_for :combo_book_combo_characters, reject_if: proc { |attributes| attributes['fighting_game_main_character_id'].blank? }, allow_destroy: true
accepts_nested_attributes_for :combo_book_combo_assists, reject_if: proc { |attributes| attributes['fighting_game_assist_character_id'].blank? }, allow_destroy: true
accepts_nested_attributes_for :combo_book_combo_character_extras, reject_if: proc { |attributes| attributes['fighting_game_charater_extra_id'].blank? }, allow_destroy: true
accepts_nested_attributes_for :combo_book_combo_extras, reject_if: proc { |attributes| attributes['fighting_game_extra_id'].blank? }, allow_destroy: true
accepts_nested_attributes_for :combo_book_combo_works, reject_if: proc { |attributes| attributes['fighting_game_main_charater_id'].blank? }, allow_destroy: true
belongs_to :combo_book_user
end
class ComboBookComboWork < ApplicationRecord
belongs_to :combo_book_combo, optional: true
belongs_to :fighting_game_main_character
end
class FightingGameMainCharacter < ApplicationRecord
belongs_to :fighting_game
has_many :fighting_game_main_character_extras
has_many :combo_book_combo_characters
has_many :combo_book_combos, through: :combo_book_combo_characters
has_many :combo_book_combo_works
has_many :combo_book_combos, through: :combo_book_combo_works
end
然后是控制器
def create
@combo_book_combo = current_combo_book_user.combo_book_combos.build(combo_book_combo_params)
if @combo_book_combo.save
render 'index', notice: "Successfully created combo"
else
render 'index', notice: "Error creating combo"
end
end
和所需的参数
def combo_book_combo_params
params.require(:combo_book_combo).permit(
:fighting_game_main_character_id,
:combo,
:combo_type,
:character_positions,
:combo_type,
:screen_position,
combo_book_combo_assists_attributes: [:id, :fighting_game_assist_character_id, :combo_book_combo_id, :_destroy],
combo_book_combo_character_extras_attributes: [:id, :combo_book_combo_id, :fighting_game_id, :_destroy],
combo_book_combo_extras_attributes:[:id, :combo_book_combo_id, :fighting_game_extra_id, :_destroy],
combo_book_combo_characters_attributes:[:id, :fighting_game_main_character_id, :combo_book_combo_id, :_destroy],
combo_book_combo_works_attributes:[:id, :combo_book_combo_id, :fighting_game_main_character_id, :test]
)
end
他们似乎一切都很好,但是当我再次提交时,我得到了
ComboBookUser Load (0.5ms) SELECT "combo_book_users".* FROM "combo_book_users" WHERE "combo_book_users"."id" = $1 ORDER BY "combo_book_users"."id" ASC LIMIT $2 [["id", 2], ["LIMIT", 1]]
(0.1ms) BEGIN
SQL (0.6ms) INSERT INTO "combo_book_combos" ("combo", "combo_type", "character_positions", "screen_position", "created_at", "updated_at", "combo_book_user_id") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [["combo", "ô"], ["combo_type", "Combo"], ["character_positions", "Ground to Ground"], ["screen_position", "Midscreen"], ["created_at", 2016-11-26 19:48:19 UTC], ["updated_at", 2016-11-26 19:48:19 UTC], ["combo_book_user_id", "2"]]
SQL (0.4ms) INSERT INTO "combo_book_combo_characters" ("combo_book_combo_id", "fighting_game_main_character_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["combo_book_combo_id", 52], ["fighting_game_main_character_id", 1], ["created_at", 2016-11-26 19:48:19 UTC], ["updated_at", 2016-11-26 19:48:19 UTC]]
(2.3ms) COMMIT
Rendering combo_book_combos/index.html.haml within layouts/application
Rendered combo_book_combos/index.html.haml within layouts/application (1.6ms)
Completed 200 OK in 76ms (Views: 61.7ms | ActiveRecord: 4.0ms)
需要写入的连接没有显示出来。我需要做什么才能使循环生成的所有选择标记都写入连接表?