Uso le guide per creare un nuovo prodotto e desidero aggiungere una categoria a ogni prodotto.Attributi nidificati Rails: come aggiungere l'attributo category al nuovo prodotto?
Ho tre tabelle: prodotto, categoria e categorizzazioni (che memorizza la relazione tra prodotti e categorie). Sto cercando di utilizzare gli attributi nidificati per gestire la creazione delle categorizzazioni, ma non so come aggiornare il mio controller e la vista/modulo in modo che i nuovi prodotti aggiornino anche la tabella delle categorizzazioni.
Qui sono i miei modelli:
class Product < ActiveRecord::Base
belongs_to :users
has_many :categorizations
has_many :categories, :through => :categorizations
has_attached_file :photo
accepts_nested_attributes_for :categorizations, allow_destroy: true
attr_accessible :description, :name, :price, :photo
validates :user_id, presence: true
end
class Category < ActiveRecord::Base
attr_accessible :description, :name, :parent_id
acts_as_tree
has_many :categorizations, dependent: :destroy
has_many :products, :through => :categorizations
end
class Categorization < ActiveRecord::Base
belongs_to :category
belongs_to :product
attr_accessible :category_id, :created_at, :position, :product_id
end
Ecco il mio nuovo controller di prodotto:
def new
@product = Product.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @product }
end
end
E qui è la mia forma vista:
<%= form_for @product, :html => { :multipart => true } do |f| %>
<% if @product.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>
<ul>
<% @product.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :description %><br />
<%= f.text_field :description %>
</div>
<div class="field">
<%= f.label :price %><br />
<%= f.number_field :price %>
</div>
<div class="field">
<%= f.file_field :photo %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Come devo aggiornare il mio controller in modo che sia il prodotto sia le tabelle di categorizzazione vengano aggiornati quando viene aggiunto un nuovo prodotto? Come aggiorno il mio file di visualizzazione in modo che le categorie vengano visualizzate in un menu a discesa?
* ma sicuri di come il mio ... la vista/il modulo dovrebbero essere aggiornati * - non abbiamo nemmeno idea perché non li hai esposti. – jdoe
Ciao @jdoe - Ho aggiunto il file di visualizzazione qui. Solo quello standard creato dal comando genera guide. –