我正在使用Rails 5.我想构建一个表单
的URL/my_objects/city_code
我希望它链接到我的控制器my_objects_controller.rb,特别是这个方法
def search_by_code
...
end
然后在这种方法中,我希望能够提取" city_code"作为变量。我不太了解路线,无法弄清楚如何做到这一点。我该怎么办呢?
编辑:我尝试将您的路线添加到我已有的现有街区......
resources :my_objects do
collection do
post 'create'
get 'import'
get '/index', to: redirect('/races/index')
get 'search'
get 'stats'
get ':code', to: '#search_by_code'
end
end
但是当我启动应用程序时,它会导致以下错误...
/Users/davea/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.3/lib/action_dispatch/routing/mapper.rb:314:in `block (2 levels) in check_controller_and_action': '' is not a supported controller name. This can lead to potential routing problems. See http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use (ArgumentError)
答案 0 :(得分:0)
您必须拥有 config / routes.rb :
get '/my_objects/:code', to: 'my_objects#show'
然后在 show action 中的 my_objects_controller.rb 中将 params [:code] 传递给模型:
MyObject.search_by_code(params[:code])
在 my_object.rb 模型中:
def self.search_by_code(code)
MyObject.where(code: code)
end
根据问题编辑固定:
修正了routes.rb:
resources :my_objects do
collection do
post 'create'
get 'import'
get '/index', to: redirect('/races/index')
get 'search'
get 'stats'
get ':code', to: 'my_objects#search_by_code'
end
end
从终端运行:
rake routes
它将输出:
Prefix Verb URI Pattern Controller#Action
my_objects POST /my_objects/create(.:format) my_objects#create
import_my_objects GET /my_objects/import(.:format) my_objects#import
index_my_objects GET /my_objects/index(.:format) redirect(301, /races/index)
search_my_objects GET /my_objects/search(.:format) my_objects#search
stats_my_objects GET /my_objects/stats(.:format) my_objects#stats
GET /my_objects/:code(.:format) my_objects#search_by_code
GET /my_objects(.:format) my_objects#index
POST /my_objects(.:format) my_objects#create
new_my_object GET /my_objects/new(.:format) my_objects#new
edit_my_object GET /my_objects/:id/edit(.:format) my_objects#edit
my_object GET /my_objects/:id(.:format) my_objects#show
PATCH /my_objects/:id(.:format) my_objects#update
PUT /my_objects/:id(.:format) my_objects#update
DELETE /my_objects/:id(.:format) my_objects#destroy
正如您所看到的,您有两条相同的路径:
GET /my_objects/:code(.:format)
和
GET /my_objects/:id(.:format)
这可能会导致问题。如果不是问题,它是一种重复和坏的小代码。