Railsnewbはこちら。私のアプリでは、それぞれがネストされた属性として複数のMameControlsを持つゲームのデータベースを作成しようとしています。MameControlsを入力するためのフィールドは、[新規]ビューには表示されますが、[編集]には表示されません。結果は[表示]に表示されません。validate_presence_of:mameControlsを使用すると、フォームが保存されず、「Mameコントロールを空白にすることはできません」と表示されます。また、Railsコンソールでは、Game.first(またはlast、またはその他のレコード).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