[英]Rails auto convert query string params to integers
我正在嘗試使用限制和偏移查詢參數實現一種分頁形式。 有沒有辦法確保這些值是整數,否則會拋出 400 錯誤,也許是通過使用 strong_parameters? 這似乎是內置在導軌中的那種東西,但我找不到任何東西。
我可以手動轉換查詢參數,但如果可能的話,我寧願使用一些更安全的東西。
就像上面的評論者@Litmus 一樣,我建議使用 Ruby gem(例如kaminari)來管理分頁。
但是,如果您設置自己滾動,並且您擔心輸入清理,確保“偏移”和“限制”參數是整數的最簡單方法可能是控制器中的過濾器:
class YourController < ApplicationController
before_filter :sanitize_page_params
# ... other controller methods ...
private
def sanitize_page_params
params[:offset] = params[:offset].to_i
params[:limit] = params[:limit].to_i
end
# ... etc. ...
end
請注意,諸如"foo"
字符串將被轉換為0
。
您基本上需要手動轉換參數。 理想情況下,將其抽象為控制器方法以保持實際方法的清潔。
Class SomeController < ActionController
before_filter: cleanup_pagination_params
def cleanup_pagination_params
params[:offset] = params[:offset].to_i
params[:limit] = params[:limit].to_i
end
# Your regular controller methods here
end
試試這個:修復數字參數值轉換為字符串
repair_nested_params({id: '11', age: '25'}) # Sample
def repair_nested_params(obj)
obj.each do |key, value|
obj[key] = parse_string(value)
end
end
def parse_string(value)
return repair_nested_params(value) if value.is_a?(Hash)
return value.map(&method(:repair_nested_params)) if value.is_a?(Array)
return value unless value.is_a?(String)
is_numeric = value.match?(/\A[-+]?\d*\.?\d+\z/)
return value unless is_numeric
(value.to_f % 1).positive? ? value.to_f : value.to_i
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.