2013-10-13 54 views
0

我有一個序列化的數據庫稱爲current_values作爲JSON哈希的典範。該模型是這樣的:有沒有一種方法可以讓params中「不確定的」散列而不允許一切嗎?

class Template 
    belongs_to :user 
    serialize :current_values, JSON 
    # has attributes title and description 
    # ... 
end 

現在我想創建一個新的模板,控制器看起來是這樣的:

class TemplateController < ApplicationController 
    # ... 
    def create 
    template = Template.new(template_params) 
    template.save 
    # ... 
    end 

    private 

    def template_params 
    params.require(:template).permit(:title, 
            :description, 
            :current_values) 
    end 
    # ... 
end 

如果我用params這個代碼,如下所示:

"template" => { 
    "title" => "title", 
    "description" => "description", 
    "current_values" => { 
    "foo" => "foo", 
    "bar" => "bar" 
    } 
} 

我收到此錯誤信息:

Unpermitted parameters: current_values 

我已閱讀permithttp://api.rubyonrails.org/的文檔,但我想不通我怎麼能允許current_values任何值,而不讓一切有permit!。我不知道哪些屬性將在current_values,因而我不能傳遞數組與允許屬性。我不希望讓一切,因爲這時有人可能會覆蓋:user_id

回答

0

爲了解決這個問題,你必須改變方法:

def template_params 
    params.require(:template).permit(:title, 
            :description, 
            :current_values) 
end 

到:

def template_params 
    params.require(:template).permit(:title, 
            :description).tap do |whitelisted| 
    whitelisted[:current_values] = params[:template][:current_values] 
    end 
end 
相關問題