我已經閱讀了一些帖子,如Value whitelist using strong parameters in Rails 4,但它不是我所需要的。Rails 4參數;如何將一個參數白名單設置爲一組值
我有一個控制器,它需要一個ID並加載模型。它還可以選擇使用查詢字符串參數(style
),該參數可以是3個值之一,即small
,medium
或large
。這被傳遞給模型上的一個方法,使用它來獲取附加圖像(使用回形針)。我注意到,如果我傳遞一個無效的參數(例如style=wibble
),那麼我會得到一個400錯誤,並通知內部文件路徑不存在。司閘員還指出這是一個安全問題...
def show
style = params[:style] || :medium
thing = Model.find(params[:id])
path = "#{Rails.root}/public#{thing.image_url(style)}"
content_type = thing.image.content_type || 'image/png'
send_file path, type: content_type, disposition: 'inline'
end
我們使用ActionController Parameters其他地方有很大的影響;但我看不出如何將參數選項「白名單」?我見過的每一處都說要使用模型驗證器,但這是假設我正在提交一個參數來更新模型,而我並不是這樣。
我知道我可以做這樣的事情:
return head :not_found unless %w(small medium large).include? style
這是最好的辦法嗎?
與此一起去,[看起來](https://github.com/thoughtbot/paperclip#post - 處理)使用紙夾模型可能設置爲'has_attached_file:avatar,styles:{thumb:[「32x32#」,::png]}'所以我可能會建議在那裏使用常量'AVAILABLE_SIZE_TYPES = {thumb :[「32x32#」,::png]}''has_attached_file:avatar,styles:AVAILABLE_SIZE_TYPES'然後'Model :: AVAILABLE_SIZE_TYPES.has_key?(params [:style])'(再次觀看字符串/符號)... single來源o如果你以後添加了':tiny',它已經被更新了。 –
擴展@SimpleLime的說法:你可以有一個常量,比如說'IMAGE_CONFIGURATIONS = {small:['32x32#',:png]} .freeze',然後定義AVAILABLE_SIZE_TYPES = IMAGE_CONFIGURATIONS.keys'或者甚至有一個ImageConfiguration '對象(參見以下優秀文章的「提取價值對象」部分https://www.toptal.com/ruby-on-rails/decoupling-rails-components) – MrYoshiji