【问题标题】:How can rails add dynamically variable lengths of url paramters to Rails?rails 如何向 Rails 添加动态可变长度的 url 参数?
【发布时间】:2016-02-22 18:48:35
【问题描述】:

我希望向 Rails 中的特定控制器添加动态路由,这将允许 url 具有动态的长 url 参数列表。

例如,如果我有链接:

/cats/display?color=orange&age=7&eyes=brown&shelter=true
/cats/display?color=orange&age=7
/cats/display?color=orange&age=7&eyes=brown
/cats/display?color=orange

我对如何设置路由以及如何访问/处理这些动态添加到链接的参数感兴趣。

谢谢

编辑:

对不起所有回答的人,虽然你的回答与我最初的问题是正确的,但我想我可能会错误地问这个问题。

如果你有这样的网址会发生什么?

/shirts/display?product1=tshirt&color1=blue&quantity1=1&product2=polo&color2=orange&quantity2=1

其中每个都被分组为一个产品,例如 product1,但您可以在一个链接中列出 3 个产品,然后在另一个链接中列出 10 个产品。您将如何处理?

【问题讨论】:

  • 以上所有链接的路由都是一样的。查询字符串参数不会改变路由。
  • 这些都是相同的路由,只是参数不同,比如叫它cats_display_path(color: 'orange', age: 7, eyes: 'brown')

标签: ruby-on-rails ruby


【解决方案1】:

所有参数都可以通过params 哈希访问。

如果你有:

/cats/display?color=orange&weight=10&eyes=brown&shelter=true

那么你的猫控制器可以是这样的:

class CatsController < ActionController
  def display
    if params[:color] == "orange-black-striped" && params[:weight] > 20
      render text: "garfield is not here" and return
    end 
  end
end

所以 url 参数或 POST 数据中的所有内容都会以 params[] 结尾。

使用自定义路由,您可以创建像/cats/display/:color/ 这样的路由,它将/cats/display/brown/ 路由到相同的/cats/display 并将params[:color] 设置为棕色。

【讨论】:

    【解决方案2】:

    以上所有链接的路线都是相同的。您可以使用相同的路由传递任意​​数量的查询字符串参数。

    如何在你的控制器中访问它们?

    您可以像这样在 params 哈希中简单地访问它们

    color = params[:color]
    age = params[:age]
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-29
      • 2020-03-10
      • 1970-01-01
      • 2011-03-20
      • 2013-05-18
      • 2011-10-26
      • 1970-01-01
      • 2010-12-22
      相关资源
      最近更新 更多