Estoy utilizando raíles para crear un nuevo producto y quiero agregar una categoría a cada producto.Rails atributos anidados: cómo agregar un atributo de categoría al nuevo producto?
Tengo tres tablas: producto, categoría y categorizaciones (que almacena la relación entre productos y categorías). Estoy tratando de usar atributos anidados para administrar la creación de las categorizaciones, pero no estoy seguro de cómo mi controlador y vista/formulario deben actualizarse para que los nuevos productos también actualicen la tabla de categorizaciones.
Éstos son mis modelos:
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
Aquí está mi nuevo controlador de producto:
def new
@product = Product.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @product }
end
end
Y aquí es mi opinión de la forma:
<%= 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 %>
¿Cómo debo actualizar mi controlador para que tanto el producto como las tablas de categorización se actualicen cuando se agrega un nuevo producto? ¿Cómo actualizo mi archivo de vista para que las categorías aparezcan en un menú desplegable?
*, pero no están seguros de cómo mi ... La vista/formulario debe actualizarse *. Tampoco tenemos idea ya que no los ha expuesto. – jdoe
Hola @jdoe: agregué el archivo de vista aquí. Solo el estándar creado por los carriles genera comando. –