假设我有这样的路线:
get 'share/:ftp/:id' => 'share#show', :as => :share
我可以让 Rails 识别用户是否键入了一个:id
或另一种不同类型的变量?因此,如果用户在其中键入某个字符串,它会根据该字符串查找记录吗?像这样的东西(伪代码):
get 'share/:ftp/:id || share/:ftp/:string' => 'share#show', :as => :share
谢谢你的帮助。
假设我有这样的路线:
get 'share/:ftp/:id' => 'share#show', :as => :share
我可以让 Rails 识别用户是否键入了一个:id
或另一种不同类型的变量?因此,如果用户在其中键入某个字符串,它会根据该字符串查找记录吗?像这样的东西(伪代码):
get 'share/:ftp/:id || share/:ftp/:string' => 'share#show', :as => :share
谢谢你的帮助。
要在路由中允许 id 或字符串,您不需要更改路由,只需使用更灵活的替代find
.
# routes.rb
get 'share/:ftp/:id' => 'share#show', :as => :share # No change.
# ShareController
@share = Share.find_param(params[:id]) # Call a custom method
# Share model
# Suppose your "string" is the name
class Share < ActiveRecord::Base
def self.find_param(input, param='name')
input.to_i == 0 ? send("find_by_#{param}" : super
end
end
除非您指定约束,否则 Rails 将接受任何类型作为参数。格式约束看起来像get '/:id', to: 'posts#show', constraints: {id: /^\d/}
更多关于这里的约束http://guides.rubyonrails.org/routing.html#segment-constraints