2

いくつかのクラスとメソッドを定義したライブラリ(mylib.rb)があります。コントローラとビューで使用できます(確認しました)。

mylib.rbには、次のものがあります。

def admins_filled (params)
  if params[:admin_selections]
    return TRUE
  end
end

def return_admins_json (params)
  admins_list = Array.new
  params[:admin_selection].each do |admin_id|
    admins_list << admin_id
  end
  return JSON.generate (admins_list)
end

私のcategories_controller.rbには、次のものがあります。

line 63:  def update
line 64:     @category = Category.find(params[:id])
line 65:    if admins_filled(params)
line 66:      params[:admins] = return_admins_json (params)
line 67:      respond_to do |format|
line 68:        if @category.update_attribute(:admins,params[:admins])
line 69:          format.html { redirect_to @category, notice: 'Category was successfully updated.' }
line 70:          format.json { head :no_content }
line 71:        end
line 72:      end
line 73:    end
line 74:
line 75:    respond_to do |format|
line 76:      if @category.update_attributes(params)
line 77:        format.html { redirect_to @category, notice: 'Category was successfully updated.' }
line 78:        format.json { head :no_content }
line 79:      else
line 80:        format.html { render action: "edit" }
line 81:        format.json { render json: @category.errors, status: :unprocessable_entity }
line 82:      end
line 83:    end
line 84: end

次のエラーが発生します。

Can't mass-assign protected attributes: utf8, _method, authenticity_token, commit, action, controller, id

アプリケーショントレース:

app/controllers/categories_controller.rb:75:in `block in update'
app/controllers/categories_controller.rb:63:in `update'

リクエストパラメータは次のとおりです。

パラメーター:

{"utf8"=>"✓",
 "_method"=>"put",
 "authenticity_token"=>"2xffx/uGVqo8/4aH7xEes0QL1Exjwa12p9g7HbEmBe0=",
 "admin_selections"=>{"admin1"=>"55",
 "admin2"=>"56",
 "admin3"=>"",
 "admin4"=>"",
 "admin5"=>"",
 "admin6"=>"",
 "admin7"=>"",
 "admin8"=>""},
 "commit"=>"Update Category",
 "id"=>"3",
 "admins"=>"[\"55\",
\"56\",
\"\",
\"\",
\"\",
\"\",
\"\",
\"\"]"}

admins列が更新されることを期待していましたが、すべてのパラメーターが渡されたようです。何が起こっているのかわかりません。

カテゴリの追加.rb(モデル):

class Category < ActiveRecord::Base
  attr_accessible :admin1, :admin2, :admin3, :admin4, :admin5, :admins, :board1, :board10, :board2, :board3, :board4, :board5, :board6, :board7, :board8, :board9, :board_members, :curator1, :curator10, :curator2, :curator3, :curator4, :curator5, :curator6, :curator7, :curator8, :curator9, :curators, :description, :mission_statement, :name
  attr_accessible :admins, :curators, :board_members, :admin_selections
  has_many :events
end
4

1 に答える 1

2

あなたのエラーメッセージはあなたに何が悪いのかを正確に伝えています、それはあなたに大量割り当てをさせません。

Rails 3.2.3に変更があり、一括割り当てを明示的に許可する必要があります

config.active_record.whitelist_attributes = false 

変更についてはこちらをご覧ください

または、一括割り当てを許可する代わりに、変更できるようにするモデルの属性にattr_accessibleを設定できます。

attr_accessible :admin_selection, :commit # etc
于 2012-07-06T04:18:06.733 に答える