Rails 3: проверьте наличие ошибки маршрутизации в коде рельсов

У меня много курсов на моем сайте. У меня есть форма «Перейти к курсу». Когда пользователь вводит действительное название курса, я успешно перенаправляю этого пользователя на страницу этого курса.

 def courses
    @title = "Courses"
    @path  = "#{root_path}"+"course/" + "#{params[:course]}"
    if @path == "/course/"
        @title = "Courses"
        render 'courses'
    else 
        redirect_to @path
    end
end

Это работает для всех допустимых входных данных, если маршрут существует. Я хочу позаботиться об ошибке, когда пользователь вводит неверное имя курса, что может привести к неправильному маршруту. Я хочу проверить наличие ошибки маршрутизации в коде и сообщить пользователю сообщение об ошибке. Это возможно?"


person Wasi    schedule 16.08.2011    source источник
comment
Почему бы вам не запросить свою базу данных, чтобы убедиться, что это правильный курс, прежде чем перенаправлять?   -  person Jeff Paquette    schedule 16.08.2011
comment
почему вы так строите маршруты? почему бы не использовать маршруты вместо этого? кажется, вы идете против структуры.   -  person corroded    schedule 16.08.2011
comment
каждая страница курса - это просто статическая страница. Я реализовал это таким образом, потому что изначально у меня было очень мало курсов, таких как 5, но теперь у меня их много. Я думаю, что я просто внедрим новый контроллер   -  person Wasi    schedule 16.08.2011
comment
Я последовал совету Джеффа, я сохранил все названия курсов в базе данных. И перед перенаправлением я запрашиваю базу данных.   -  person Wasi    schedule 17.08.2011


Ответы (2)


Вместо создания собственных маршрутов в контроллере используйте соглашение Rails и поместите их в config/routes.rb:

    resources :courses

Это создаст для вас маршрут /courses/:id. Тогда ваш контроллер упростится до:

    def show
      @title = "Courses"
    end

Было бы полезно, если бы вы включили свою модель, контроллер и route.rb.

person airlok    schedule 16.08.2011
comment
у меня нет модели или чего-то еще.. Курсы - это просто статические страницы, и я вручную назначил им маршруты в config/routes.rb - person Wasi; 16.08.2011
comment
Я рекомендую использовать архитектуру MVC, на которой основан Rails, или выбрать другой фреймворк. - person airlok; 16.08.2011

Вы можете использовать это, чтобы проверить, действителен ли ваш маршрут:

def check_route(route)

    @route_valid = true
    begin
        ActionController::Routing::Routes.recognize_path(@route, :method => :get)
    rescue
        # error means that your route is not valid, so do something to remember that here
        @route_valid = false
    end
end

Но в целом мне не нравится ваша идея создания маршрута на основе курса. Почему бы просто не использовать простой поисковик?

person rookieRailer    schedule 16.08.2011
comment
да, вы правы, я все еще изучаю рельсы. Привыкание к этому. Я больше не следую этой логике. Я создал базу данных курсов и запрашиваю базу данных перед перенаправлением пользователя - person Wasi; 17.08.2011