簡體   English   中英

Rails 自動將查詢字符串參數轉換為整數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM