Rails новичок здесь. В моем приложении я пытаюсь создать базу данных игр, каждая из которых имеет несколько MameControls как вложенные атрибуты. Поля для ввода MameControls отображаются в новом представлении, но не в редактировании, результаты не отображаются в Show, и если я validate_presence_of: mameControls, он не сохранит форму, заявив, что «элементы управления Mame не могут быть пустыми». И в консоли rails Game.first (или последняя, или любая другая запись) .mame_controls возвращает только []
. Итак, насколько я могу судить, вложенный атрибут не сохраняется, хотя я уверен, что настроил все так же, как показано в Railscast # 196. Вот класс игры:
class Game < ActiveRecord::Base
has_many :mame_controls, :dependent => :destroy
attr_accessible :name, :year, :company, :designer, :genre,
:sb_info, :wiki_link, :arcade_history_link, :arcade_museum_link,
:caesar_link, :wildcard_link, :mame_controls
accepts_nested_attributes_for :mame_controls, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
validates_presence_of :name, :year, :company, :genre, :sb_info, :mame_controls
end
mame_control.rb:
class MameControl < ActiveRecord::Base
belongs_to :game
attr_accessible :name, :game_action
end
Код формы для ввода или редактирования MameControls:
в _form.html.erb:
<% f.fields_for :mame_controls do |builder| %>
<%= render "control_fields", :f => builder %>
<% end %>
_control_fields.html.erb:
<div class="field">
<p>
<%= f.label :name, "Mame Control Name" %><br />
<%= f.text_field :name %><br />
<%= f.label :game_action, "Game Action" %><br />
<%= f.text_field :game_action %>
</p>
</div>
в games_controller.rb:
def new
@game = Game.new
5.times do
mame_control = @game.mame_controls.build
end
end
def create
@game = Game.new(params[:game])
end