2012-07-06 39 views
2

我有一個庫(mylib.rb),其中我定義了一些類和方法。它可用於控制器和視圖(我證實了這一點)。Rails:保存屬性不起作用

在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\", 
\"\", 
\"\", 
\"\", 
\"\", 
\"\", 
\"\"]"} 

我期待管理員欄進行更新,但它看起來像所有的PARAMS傳遞。我不明白髮生了什麼事。

添加categories.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 

回答

2

你的錯誤信息,告訴你什麼是錯的,它不會讓你的質量分配。

有一個在軌3.2.3,需要你允許質量分配明確

config.active_record.whitelist_attributes = false 

See here關於變更

或者,而不是允許質量分配可以設置爲attr_accessible屬性的變化在你想要改變的模型中,例如

attr_accessible :admin_selection, :commit # etc 
+0

我設置模型中的個別訪問屬性,但是如果你讀了錯誤信息,你會看到,這些都不是屬性:UTF8,_method,真實性令牌,......我編輯我到的問題添加我的模型 – EastsideDeveloper 2012-07-06 06:18:11

+0

我也得到了utf8,_method和真實性標記作爲質量分配。 – kevinwmerritt 2012-07-07 23:03:33

+1

爲什麼選擇此答案?我在這裏遇到了同樣的問題,正確的答案將包含關於如何從列表中過濾這些默認參數的解釋.. – 2012-08-09 15:12:09