J'essaie de créer une application de backlog de produit simple pour m'enseigner Rails. Pour chaque produit, il peut y avoir plusieurs entrées de backlog produit. Je souhaite donc créer une vue de produit qui affiche les informations sur le produit, toutes les entrées de backlog pour le produit et inclut un formulaire imbriqué pour ajouter plus d'entrées de backlog.Problème de formulaire imbriqué dans Rails: NoMethodError dans Afficher
Tout fonctionne jusqu'à ce que j'essaie d'ajouter la forme à la vue, ce qui entraîne alors l'erreur suivante:
NoMethodError in Products#show
Showing app/views/products/show.html.erb where line #29 raised:
undefined method `pblog_ref' for #<Product:0x10423ba68>
Extracted source (around line #29):
26: <%= f.error_messages %>
27: <p>
28: <%= f.label :pblog_ref %><br />
29: <%= f.text_field :pblog_ref %>
30: </p>
31: <p>
32: <%= f.label :product %><br />
La vue du produit où le problème est signalé comme suit (les travaux partiels bien, donc Je ne vais pas inclure ce code):
<h1>Showing product</h1>
<p>
<b>Product ref:</b>
<%=h @product.product_ref %>
</p>
<p>
<b>Description:</b>
<%=h @product.description %>
</p>
<p>
<b>Owner:</b>
<%=h @product.owner %>
</p>
<p>
<b>Status:</b>
<%=h @product.status %>
</p>
<h2>Product backlog</h2>
<div id="product-backlog">
<%= render :partial => @product.product_backlogs %>
</div>
<% form_for(@product, ProductBacklog.new) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :pblog_ref %><br />
<%= f.text_field :pblog_ref %>
</p>
<p>
<%= f.label :product %><br />
<%= f.text_field :product %>
</p>
<p>
<%= f.label :description %><br />
<%= f.text_field :description %>
</p>
<p>
<%= f.label :owner %><br />
<%= f.text_field :owner %>
</p>
<p>
<%= f.label :status %><br />
<%= f.text_field :status %>
</p>
<p>
<%= f.submit 'Create' %>
</p>
<% end %>
<%= link_to 'Edit', edit_product_path(@product) %> |
<%= link_to 'Back', products_path %>
C'est le modèle du produit:
class Product < ActiveRecord::Base
validates_presence_of :product_ref, :description, :owner
has_many :product_backlogs
end
Ce modèle est le ProductBacklog:
class ProductBacklog < ActiveRecord::Base
belongs_to :product
end
Ce sont les routes:
map.resources :product_backlogs
map.resources :products, :has_many => :product_backlogs
Toutes les colonnes existent dans le schéma pour ce modèle:
create_table "product_backlogs", :force => true do |t|
t.string "pblog_ref"
t.integer "product_id"
t.string "description"
t.string "owner"
t.string "status"
t.datetime "created_at"
t.datetime "updated_at"
end
J'ai vérifié ce que je Je fais contre le Creating a weblog in 15 minutes with Rails 2 screencast, et en principe je semble faire la même chose que lui - seuls ses commentaires imbriqués fonctionnent, et les miens non!
J'espère que quelqu'un peut aider avec ceci, avant que je devienne fou! Je suis sûr que c'est quelque chose de trivial.
Oui, il y a. Désolé, j'ai oublié d'inclure les détails de la table dans le schéma (maintenant ajouté ci-dessus). Tous les champs sont là. Lorsque je supprime les lignes se référant à pblog_ref, l'erreur se déplace sur la ligne f.text_field: product. – Brian
@brianheys: J'ai édité ma réponse. Est-ce que cela résout le problème? – klew
Merci pour votre aide. J'ai réussi à résoudre le problème maintenant. Voir ma réponse ci-dessous. – Brian