1

假设我有这样的路线:

get 'share/:ftp/:id' => 'share#show', :as => :share

我可以让 Rails 识别用户是否键入了一个:id或另一种不同类型的变量?因此,如果用户在其中键入某个字符串,它会根据该字符串查找记录吗?像这样的东西(伪代码):

get 'share/:ftp/:id || share/:ftp/:string' => 'share#show', :as => :share

谢谢你的帮助。

4

2 回答 2

1

要在路由中允许 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
于 2013-09-02T02:05:27.267 回答
0

除非您指定约束,否则 Rails 将接受任何类型作为参数。格式约束看起来像get '/:id', to: 'posts#show', constraints: {id: /^\d/}更多关于这里的约束http://guides.rubyonrails.org/routing.html#segment-constraints

于 2013-09-02T09:41:48.137 回答