J'ai créé une table jointe à cet effet. Voici le code:Produits - Catégories association. (edit) appartient à, has_and_belongs_to_many?
class CreateCategoriesProductsJoin < ActiveRecord::Migration
def self.up
create_table 'categories_products', :id => false do |t|
t.column 'category_id', :integer
t.column 'product_id', :integer
end
end
def self.down
drop_table 'categories_products'
end
end
Le modèle de produit:
class Product < ActiveRecord::Base
has_and_belongs_to_many :categories
attr_accessor :new_category_name
before_save :create_category_from_name
def create_category_from_name
create_category(:name => new_category_name) unless new_category_name.blank?
end
end
Et le modèle de la catégorie:
class Category < ActiveRecord::Base
has_and_belongs_to_many :products
end
Jusqu'à présent, si bon. Le problème est avec le formulaire.html.erb. Code ici:
<p>
<label for="product_category_id">Category:</label><br />
<%= f.collection_select :category_id, Category.find(:all), :id, :name, :prompt => "Select a Category" %>
or create one:
<%= f.text_field :new_category_name %>
</p>
J'essaie de charger les catégories dans une boîte de sélection, mais je reçois un message « méthode non définie category_id » pour # ».
Je ne comprends pas pourquoi? J'ai aussi essayé avec has_many: à travers mais la même chose s'est produite.
Je devrais être capable de dessiner les catégories de cette manière puisque les sont associées mais je ne le suis pas. Des idées?
J'ai essayé le screancast de railscast.com mais pas de chance. Avez-vous à l'esprit un tutoriel complet/exemple avec la catégorie de produit, les associations de sous-catégorie? Je n'ai pas encore trouvé de descente (sauf pour les railscast mais ça ne marche pas pour moi).
Merci beaucoup pour votre temps et merci pour le problème qu'il vous a fallu pour répondre (si vous l'avez fait).
Modifier: J'ai trouvé le problème dans le modèle du produit. Voici le correctif:
class Product < ActiveRecord::Base
belongs_to :category
def category_name
category.name if category
end
def category_name=(name)
self.category = Category.find_by_name(name) unless name.blank?
end
end
Édition 2: J'ai aussi un autre problème avec les catégories.
Le nom de catégorie n'apparaît pas dans la vue. J'appelle la fonction category_name mais je n'ai rien en retour. Comme cela (show.html.erb):
<p>
<label for="product_category_id">Category:</label><br />
<%= f.collection_select :category_name, Category.find(:all), :id, :name, :prompt => "Select a Category" %>
or create one:
<%= f.text_field :new_category_name %>
</p>
Or (show.html.erb):
<td><%= product.category_name %></td>
j'ai essayé de changer de has_and_belongs_to_many :categories
et au moins je suis rentré "Catégorie" comme nom qui est bizarre ... car j'ai 4 catégories.
Un produit appartient à une seule catégorie. PS: Encore une fois, merci pour votre temps.
Non qui ne fonctionne pas non plus. – storedope