Вложенные атрибуты Rails - как добавить атрибут категории к новому продукту?

Я использую rails для создания нового продукта и хочу добавить категорию к каждому продукту.

​​У меня есть три таблицы: продукт, категория и категории (в которых хранятся отношения между продуктами и категориями). Я пытаюсь использовать вложенные атрибуты для управления созданием категорий, но не знаю, как это сделать. мой контроллер и представление/форма должны быть обновлены, чтобы новые продукты также обновляли таблицу категорий.

Вот мои модели:

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

Вот мой новый контроллер продукта:

def new
    @product = Product.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @product }
    end
  end

А вот моя форма просмотра:

<%= 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 %>

Как мне обновить мой контроллер, чтобы и продукт, и таблицы категорий обновлялись при добавлен новый продукт? Как обновить файл представления, чтобы категории отображались в раскрывающемся меню?

6
задан william tell 14 May 2012 в 15:09
поделиться