Rails newb ici. Dans mon application, j'essaie de créer une base de données de jeux ayant chacun plusieurs MameControls comme attributs imbriqués. Les champs pour entrer dans MameControls apparaissent dans la vue New mais pas dans Edit, les résultats ne sont pas affichés dans Show, et si je valide valid_of: mameControls, il ne sauvegarde pas le formulaire, en indiquant "Les contrôles Mame ne peuvent pas être vides". Et dans la console rails, Game.first (ou last, ou tout autre enregistrement) .mame_controls renvoie uniquement []
. Donc, autant que je sache, l'attribut imbriqué n'est pas sauvegardé, même si je suis à peu près sûr d'avoir tout mis en place de la même manière que ce qui est montré dans Railscast # 196. Voici la classe du jeu:Impossible d'enregistrer l'attribut imbriqué dans 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
Le code de formulaire pour entrer ou modifier MameControls est-ce.
dans _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>
dans 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
Merci, mais j'ai peur d'ajouter: mame_controls_attributes à attr_accessible ne fait aucune différence. Et ne vous inquiétez pas, les contrôles ne sont pas dans l'action show. Ce que je voulais dire, c'est simplement que les données ne sont pas affichées (en tant qu'informations statiques). Désolé de ne pas être clair à ce sujet, j'ai corrigé le post original. – user541269