1

我有三个模型,分别称为 Product、Category 和 Categorization。

产品型号:

    attr_accessible :title, :description, :price, :image_url
    has_many :categorizations
    has_many :categories, :through => :categorizations

类别型号:

    attr_accessible :name
    has_many :categorizations
    as_many :products, :through => :categorizations

分类模型:

    attr_accessible :category_id, :product_id
    belongs_to :category
    belongs_to :product

创建产品模型时如何创建分类对象?我在新产品表单中添加了类别选择。

基本上,当它创建新产品对象时,我想推入 product_id 和选定的 category_id 并创建一个新的分类对象,以便我可以将产品与类别相关联。

_form.html 用于新产品:

    <div>
        <%= f.label :title %>:<br />
        <%= f.text_field :title %><br />
      </div>
      <div>
        <%= f.label :description %>:<br />
        <%= f.text_area :description, :rows => 6 %>
      </div>
      <div>
        <%= f.label :price %>:<br />
        <%= f.text_field :price %><br />
      </div>
      <div>
        <%= f.label :image_url %>:<br />
        <%= f.text_field :image_url %><br />
      </div>

      <% @categories.each do |category| %>

      <div>
        <% f.fields_for :categorization do |builder| %>
        <%= render 'categorization_fields', :f => builder, :product => @product,         :category => category %>
      </div>
      <% end %>
      <% end %>

产品控制器:

    def index
        @products = Product.all
      end

      def new
        @category = Category.all
        @product = Product.new
        @categories = @category.find(params[:category])
        categorization = @product.categorizations.build
      end

      def create
        @product = Product.new(params[:product])
        if @product.save
          redirect_to products_path
        else
          render :new
        end
      end

      def edit
        @product = Product.find(params[:id])
      end

      def update
        @product = Product.find(params[:id])
        if @product.update_attributes(params[:product])
          redirect_to @product
        else
          render :edit
        end
      end

      def show
        @product = Product.find(params[:id])
      end

      def destroy
        @product = Product.find(params[:id])
        @product.destroy
        redirect_to products_path
      end

    end

我无法在产品模型中使用 Accepts_nested_attributes_for 像这样工作。

任何帮助,将不胜感激。

4

1 回答 1

0

也许您需要为autosave所需的关系添加选项,例如:

has_many :categorizations, :autosave => true
accepts_nested_attributes_for :categorizations

这应该autosave在保存您声明关系的模型时保存 'd 关系。

于 2012-12-05T13:21:40.790 回答