将扩展名插入URL的规范方法

时间:2014-05-27 05:38:31

标签: ruby-on-rails

我在Rails应用程序中有一个URL,看起来像一个简单的/resource或更复杂的/resource?page=3&sort=id&direction=asc。可以通过将.tsv附加到资源名称 - /resource.tsv?page=3&sort=id&direction=asc来导出视图背后的数据。为此,我在我的.erbadd_extension_to_url(request.original_url, '.tsv')中使用此调用:

module ResourceHelper
  def add_extension_to_url(url, extension)
    query_start = url.index('?')
    if query_start.present?
      url.insert(query_start, extension)
    else
      url + extension
    end
  end
end

它有效,但它并不漂亮。我错过了request.query_string这样的内容,它会告诉我URL中的问号之后的内容吗?

1 个答案:

答案 0 :(得分:1)

你所谓的“扩展”是Rails术语中的“格式”。您可以使用路由系统生成URL时指定格式。类似的东西:

order_path(@order, format: :tsv)

如果你想保留一个现有的查询字符串(带有排序,分页和诸如此类的东西),你可以这样做

order_path(@order, params.merge(format: :tsv))

至于安全问题,只要您过滤params以使其仅包含预期值,您就应该没问题。惯用的方法是使用strong_parameters(包含在Rails 4中)。