레일을 newb 여기에 있습니다. 내 애플 리케이션에서 각각 중첩 된 특성으로 여러 MameControls 가지고 게임 데이터베이스를 만들려고. New view에는 MameControls를 입력하는 필드가 표시되지만 Edit에는 표시되지 않으며 결과는 Show에 렌더링되지 않으며 validate_presence_of : mameControls 인 경우 "Mame controls can not be empty"라는 양식을 저장하지 않습니다. 그리고 레일 콘솔에서 Game.first (또는 마지막 또는 다른 레코드) .mame_controls는 []
만 반환합니다. 따라서 중첩 된 속성이 저장되지 않는다고 말할 수있는 한, 레일 스 캐스트 # 196에 표시된 것과 비슷하게 모든 것을 설정 했음에도 불구하고 말입니다.Rails에 중첩 된 속성을 저장할 수 없습니다.
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 :
games_controller.rb에서<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>
:
def new
@game = Game.new
5.times do
mame_control = @game.mame_controls.build
end
end
def create
@game = Game.new(params[:game])
end
고마워요.하지만 attr_accessible에 대한 mame_controls_attributes가 아무런 차이가 없습니다. 그리고 컨트롤이 쇼 동작에 있지 않으므로 걱정하지 마십시오. 내 말은 단순히 데이터가 정적 정보로 표시되지 않는다는 것입니다. 죄송합니다. 원래 게시물을 수정했습니다. – user541269