2014-01-27 26 views
0

抱歉發佈似乎是一個常問的問題,但我已經努力了兩天而沒有離得更近。Rails 4沒有通過允許的參數

我正在運行Rails 4.0.1(包括Devise,CanCan等),並且擁有帶有HABTM users_roles表(由自去除的rolify創建的)的用戶和角色模型。

class Role < ActiveRecord::Base 

    has_and_belongs_to_many :users, :join_table => :users_roles 
    belongs_to :resource, :polymorphic => true 

    attr_reader :user_tokens 

    def user_tokens=(ids) 
    self.user_ids = ids.split(",") 
    end 
end 

我提交的表單數據是:

"role"=>{"name"=>"disabled", "resource_id"=>"", "resource_type"=>"Phone", "user_tokens"=>["", "3"]} 

(不知道在哪裏空字符串從何而來,它不是在選項列表,但嘿,歡迎Rails的)。

我的問題是獲取user_tokens數據傳遞到控制器中的相應變量。

有很多帖子的提示正確的格式(例如,how to permit an array with strong parameters

如果我指定的允許的參數因此:

params.require(:role).permit(:name, :resource_id, :resource_type, :user_tokens => []) 

我得到沒有其他細節「500內部服務器錯誤」 。

如果我指定的許可證爲

params.require(:role).permit(:name, :resource_id, :resource_type, user_tokens: []) 

我沒有得到任何錯誤(在開發日誌中沒有未經許可的參數),但的user_tokens陣列沒有在@Role通過。

如果我通過一個控制檯運行這種情況下,我得到:

params = ActionController::Parameters.new(:role => {:resource_id => "", :resource_type => "Phone", :user_tokens => ["", "3"]}) 
params.require(:role).permit(:name, :resource_id, :resource_type, user_tokens: []) 
=> {"resource_id"=>"", "resource_type"=>"Phone", "user_tokens"=>["", "3"]} 
params.require(:role).permit(:user_tokens).permitted? 
Unpermitted parameters: resource_id, resource_type, user_tokens 
=> true 

我堅持到哪兒,我應該嘗試尋找下一個。

回答

0

即使我確信我已經試了一下,改變模型是

def user_tokens=(ids) 
    self.user_ids = ids 
    end 

固定它。除了當我花了4天的時間試圖解釋爲什麼我的很多模型不工作時,我一直在努力去理解這一點。 我想如果我全職工作而不是僅僅爲特定的系統管理員項目工作會更容易。