0

Rails 3.2.14 でネストされた属性を機能させることにしばらくこだわっており、多くの例を見てきましたが、まだ機能していないようです。フォームを送信しようとすると、次のエラーが表示されます。

ActiveModel::MassAssignmentSecurity::Error in Admin::CategoriesController#create

Can't mass-assign protected attributes: products, category_departments

これが私のコードです:

 class Category < ActiveRecord::Base
   extend FriendlyId 
   friendly_id :category_name, use: :slugged
   attr_accessible :category_name, :products_attributes, :slug, :department_id,     :category_departments_attributes

   has_many :products
   has_many :category_departments
   has_many :departments, :through => :category_departments

   validates_presence_of :category_name

   accepts_nested_attributes_for :products
   accepts_nested_attributes_for :category_departments

   scope :department_category, lambda {|department| joins(:department,   :products).where("departments.department_name" => department ) }
end

コントローラ:

 class Admin::CategoriesController < ApplicationController

      def new
        @category = Category.new
     @category.products.build
     @category.category_departments.build
  end

def create
   @category = Category.new(params[:category])
   if @category.save
     redirect_to admin_products_path
   else
     flash.now[:error] = "Could not save the category"
     render "new"
   end
 end

フォームビュー そこで、商品の fields_for を削除し、商品作成ページから部門を選択できるようにすることで、最終的にこれを解決しました。

 Form:-
  <h1> Create a Category </h1>
   <%= form_for :category, :url => { :action => "create" }, :method => :post do  |f| %>
   <%= render :partial => 'form_category', :locals => {:f => f} %>
  <% end %>

 Partial:-
    <div class="category-form-update">
<form class="form-horizontal">

    <div class="control-group">
        <label class="control-label">
            <%= f.label :category_name %>
        </label>
        <div clas="controls">
            <%= f.text_field :category_name %>
        </div>
    </div>
<div class="control-group">
        <%= f.fields_for :category_departments do |builder| %>
        <label class="control-label">
            <%= builder.label :department, "Department" %>
        </label>
        <div class="controls">
            <% department = Department.all.map { |dep| [dep.department_name.capitalize, dep.id] } %>
        <%= builder.select(:department_id ,options_for_select(department)) %>
        <% end %>
        </div>
    </div>

    <div class="control-group">
        <div class="controls">
            <button class="btn">
                <%= f.submit %>
            </button>
        </div>
    </div>
</div>

ここで何が正しく行われていないのでしょうか?

4

1 に答える 1