Ruby On Rails路线

时间:2010-05-04 18:44:53

标签: ruby-on-rails

我无法弄清楚如何获得以下路线。这是我的routes.rb文件的摘录:

  map.resources :treatments
  map.root :controller => "home"
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
  map.connect ':action', :controller => 'home' # replaces the need to manually map pure actions to a default controller

  map.resources :bookings
  map.resource :dashboard
  map.resource :home

现在我意识到排序很重要,但我似乎无法使它们正常工作。

我想要的是如果您未登录或未登录,http://localhost:3000/bookings/new实际上会将您带到http://localhost:3000/bookings/signmeup行动。问题是,如果我改变我的路线,当我尝试在之后创建一个新的预订我已经登录,那么它不会POST表单提交,只是让我回到视图页面。这绝对是因为路线好像我重新排列了map.resources:预订在所有这些之前,然后才有效。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

根据经验,您希望资源路由在通用:controller/:action/:id路由之前(事实上,我甚至完全删除通用路由),因为首先定义的路由优先超过后来分配的那些。

如果用户未登录,重定向到/ bookings / signmeup,则应使用before_filter来处理:

class BookingsController < ApplicationController
  before_filter :check_login

  # ...

  protected
    # This is a GENERIC example; change to fit your authentication method
    def check_login
      unless user_is_logged_in
        redirect_to ...
      end
    end
end