Je suis nouveau sur le RoR, mais ont décidé que je peut tout aussi bien apprendre sur 4. Cela peut ou peut ne pas être une bonne idée. Je suis en train de créer un formulaire en utilisant des attributs et j'ai du mal.
J'ai regardé ce railscast http://railscasts.com/episodes/196-nested-model-form-part-1 et je suis en train de recréer une situation similaire à la mienne.
J'ai un projet de Loi objet qui a de nombreuses en Raison des objets. La Cause de l'objet appartient aussi à une Personne. Je veux un formulaire où je peux créer le projet de Loi et de ses enfants, les Cotisations de tous dans une seule page.
Les champs appropriés sont affichés sur la page (mais sans une liste déroulante pour Personne encore) et de le soumettre est réussie. Cependant, aucun des enfants n'cotisations sont enregistrées dans la base de données et une erreur est générée dans le journal du serveur:
Non autorisé paramètres: dues_attributes
Il y a eu une sorte de changement dans les Rails 4, ou suis-je en manquant quelque chose de complètement.
Juste avant l'erreur, le journal affiche ceci:
A commencé à publier des "factures" pour 127.0.0.1 à 2013-04-10 00:16:37 -0700 Le traitement par BillsController#créer en HTML
Paramètres: {"utf8"=>"✓", "authenticity_token"=>"ipxBOLOjx68fwvfmsMG3FecV/q/hPqUHsluBCPN2BeU=", "projet de loi"=>{"société"=>"Comcast", "mois"=>"avril ", "annee"=>"2013", "dues_attributes"=>{"0"=>{"montant"=>"30", "person_id"=>"1"}, "1"=>{"montant"=>"30", "person_id"=>"2"}, "2"=>{"montant"=>"30", "person_id"=>"3"}}}, "commettre"=>"Créer un projet de Loi"}
Code correspondant est indiqué ci-dessous
en raison.rb
class Due < ActiveRecord::Base
belongs_to :person
belongs_to :bill
end
le projet de loi.rb
class Bill < ActiveRecord::Base
has_many :dues, :dependent => :destroy
accepts_nested_attributes_for :dues, :allow_destroy => true
end
bills_controller.rb
# GET /bills/new
def new
@bill = Bill.new
3.times { @bill.dues.build }
end
factures/_form.html.erb
<%= form_for(@bill) do |f| %>
<div class="field">
<%= f.label :company %><br />
<%= f.text_field :company %>
</div>
<div class="field">
<%= f.label :month %><br />
<%= f.text_field :month %>
</div>
<div class="field">
<%= f.label :year %><br />
<%= f.number_field :year %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<%= f.fields_for :dues do |builder| %>
<%= render 'due_fields', :f => builder %>
<% end %>
<% end %>
factures/_due_fields.html.erb
<div>
<%= f.label :amount, "Amount" %>
<%= f.text_field :amount %>
<br>
<%= f.label :person_id, "Renter" %>
<%= f.text_field :person_id %>
</div>
Mise à JOUR bills_controller.rb: Cela fonctionne!
def bill_params
params.require(:bill).permit(:company, :month, :year,
dues_attributes: [:amount,
:person_id])
end