我的路线目前有些问题。
我有一个带功能添加的控制器室。另外我在houses / add.html.erb
中有一个视图我用domain / houses / add调用它,所以我收到了这个错误:没有路由匹配[GET]" / houses / add"
routes.rb看起来像这样:
resources :api_users, :as => :users
get '/:controller(/:action(/:id))'
post '/:controller(/:action(/:id))'
答案 0 :(得分:1)
如果您打算只使用get和post方法,
由于内存使用情况,请勿使用resources
。
match "houses/add" => "houses#add", via: [:get, :post]
并且绝不使用routes.rb
get '#{action}' <- this is not working
get "#{action" <- this works.
YOURCONTROLLER.action_methods.each do |action|
get "CONTROLLER_NAME/#{action}", to: "CONTROLLER_NAME##{action}"
end
答案 1 :(得分:0)
将其更改为:
resources :api_users, as: :users
# empty for memory concerns
resources :houses, only: [] do
collection do
get :add
post :another_action
end
end
或者,如果你只想重新命名为add,那么你可以这样做:
resources :houses, path_names: { new: 'add' }
# Which will now path /domain/houses/new --> /domain/houses/add
# NOTE* This does not change the actual action name, it will still look for houses#new
有关单行路由match
协议的注意事项:
guides.rubyonrails.org/routing 3.7 HTTP动词约束
通常,您应该使用get,post,put,patch和delete方法来约束到特定动词的路由。您可以将匹配方法与:via选项一起使用以匹配多个动词:
match 'photos', to: 'photos#show', via: [:get, :post]
您可以使用via :: all:
将所有动词与特定路线匹配match 'photos', to: 'photos#show', via: :all
将GET和POST请求路由到单个操作具有安全性 影响。通常,您应该避免将所有动词都路由到 行动,除非你有充分的理由。
Rails中的'GET'不会检查CSRF令牌。你永远不应该写信给 来自'GET'请求的数据库,有关更多信息,请参阅 CSRF对策安全指南。