Rails中的路由问题

时间:2015-12-26 21:49:20

标签: ruby-on-rails ruby ruby-on-rails-4

我的路线目前有些问题。

我有一个带功能添加的控制器室。另外我在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))'

2 个答案:

答案 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对策安全指南。