Cat*_*nie 2 ruby rest routes ruby-on-rails ruby-on-rails-4
我正在尝试通过约束实现这两个路由:
get "products/:id", to: "products#show", constraints: { id: /\d/ }
get "products/:name", to: "products#search", constraints: { name: /[a-zA-Z]/ }
Run Code Online (Sandbox Code Playgroud)
第一条路由应使用URL触发,localhost:3000/products/3而最后一条应以触发localhost:3000/products/?name=juice。
不起作用,我在这个问题上搜索了很多,但是我似乎找到了Ruby on Rails的第二或第三版的解决方案,并且其中大多数现在已被弃用。
有任何想法吗?谢谢。
如果您喜欢结果URL的外观,则可以按原样使用路由。不需要查询字符串。
在控制器中,您将遵循以下原则:
def show
@product = Product.find(params[:id])
# do stuff
end
def search
# I'm assuming your Product model has a `name` attribute
@product = Product.find_by(name: params[:name])
# do stuff
end
Run Code Online (Sandbox Code Playgroud)
您可能希望在find_by返回nil时进行一些错误检查,因为:name它与任何内容都不匹配,但是基本上就是这样。
您的route.rb具有原始的路由定义:
get "products/:id", to: "products#show", constraints: { id: /[[:digit]]/ }
get "products/:name", to: "products#search", constraints: { name: /[[:alpha:]]/ }
Run Code Online (Sandbox Code Playgroud)
您的应用程序应同时响应以下两个方面: