

Ruby on railsで簡単なリストページを作成しています。  
ページングのためにURLでoffsetとlimitというget parameterを渡しています。  
そのパラメータをコントローラで空白、文字列等の場合はデフォルト値で「0」を入れていますが、  
URLはそのままになっていて少し不自然な気がします。  
例えば、0.0.0.0:3000/admin/historeis?offset='a'&limit=20のような場合、  
コントローラーではoffsetに「０」を入れて、idが「0」のデータから取り出すようにする。  
でも、URLは上記のママ。なのでURLを  
0.0.0.0:3000/admin/historeis?offset=0&limit=20  
上記のように上書きしたいです。

次は自分のコントローラーのコードです。

[code]

    def index
      @offset = offset
      @limit = limit
    
      @histories = history.limit(@limit).offset(@offset))
    end
    
    def offset
      return 0 if params[:offset].nil?
      return 0 unless params[:offset] =~ /^[0-9]*$/
    end
    
    def limit
      return 10 if params[:limit].nil?
      return 10 unless params[:limit] =~ /^[0-9]*$/
    end
    
[/code]


CC BY-SA 3.0
2016-04-26T09:46:43.890
24361
2016-04-28T02:28:05.593
10710
question
ruby-on-rails ruby
urlのget parameterを上書きする方法


URLに含まれる（GET）パラメータは、パラメータという名前が付いている通り、ユーザーからの入力値であり、それそのものを一回のリクエストで変更するのは難しいかと思います。

一度、リダイレクトをはさみ、処理をするのはいかがでしょうか。

[code]

    DEFAULT_OFFSET_PARAM = 0
    DEFAULT_LIMIT_PARAM = 0
    
    before_action :validate_offset, only: :index
    before_action :validate_limit, only: :index
    
    def index
      # ...
    end
    
    def valid_number?(num)
      return false if num.nil?
      return false unless num =~ /^[0-9]*$/
      true
    end
    
    def validate_offset
      unless valid_number?(params[:offset])
        redirect_to histories_path(offset: DEFAULT_OFFSET_PARAM, limit: params[:limit])
      end
    end
    
    def validate_limit
      unless valid_number?(params[:limit])
        redirect_to histories_path(offset: params[:offset], limit: DEFAULT_LIMIT_PARAM)
      end
    end
    
[/code]


CC BY-SA 3.0
2016-04-28T02:28:05.593
24404
2016-04-28T02:28:05.593
12694
24361
answer