2013-02-21 2 views
0

Я смущен тем, как сортировать маршруты для моего действия show. На данный момент, если я выбираю по конкретной рекомендации для «шоу» этого, URL говоритПользовательские маршруты с атрибутом id

/рекомендация/1

где 1 является руководящим принципом ID

Я хотел бы это сказать

/название

(где т его название указывается в руководстве). Я смущен, как управлять этим в моих маршрутах. На данный момент мои маршруты имеет

get 'guideline/:id', to: 'guidelines#show', as: :seeguideline 

, но это только показывает, руководящее/1, как я уже говорил, так что я понимаю, что я делаю что-то неправильно

мой взгляд ссылки на это с

<%= link_to guideline.title, seeguideline_path(id: guideline.id) %> 

шоу действие в guidelines_controller.rb является

def show 
    @guideline = Guideline.where(title: params[:title]).first 
    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @guideline } 

    end 
    end 

маршруты

ActiveAdmin.routes(self) 

    devise_for :admin_user, ActiveAdmin::Devise.config 


    get "guidelines/topic" 
    get "guidelines/topichospital" 
    get "guidelines/topicspecialty" 
    get "guidelines/favourite" 


    devise_for :users 

    devise_scope :user do 
    get 'signup', to: 'devise/registrations#new', as: :register 
    get 'login', to: 'devise/sessions#new', as: :login 
    get 'logout', to: 'devise/sessions#destroy', as: :logout 
    get 'edit', to: 'devise/registrations#edit', as: :edit 
    put 'users' => 'devise/registrations#update', :as => 'user_registration' 
    get 'about', to: 'about#about', as: :about 
    end 

    resources :guidelines 
    get 'guidelines', to: 'guidelines#index', as: :guidelines 
    get 'favourites', to: "favourites#show", as: :favourites 
    get 'topics', to: 'guidelines#list', as: :topics 
    get 'hospitals', to: 'guidelines#listhospital', as: :hospitals 
    get 'specialties', to: 'guidelines#listspecialty', as: :specialties 



    root :to => 'guidelines#index' 
    get '/:id', to: 'profiles#show', as: :myprofile 
    get '/:title', to: 'guidelines#show', as: :seeguideline 

ответ

1

, если вы хотите, чтобы соответствовать URL-адресов, как «/ URL», Вы должны поместить это в нижней части файла маршрутов, так что занимает наименьшую приоритет (т.е. оно не совпадает с «/ проекты», если у вас есть проекты контроллер). в теории это делается через

match '/:title' => 'guidelines#show', as: :seeguideline 

затем в контроллере

def show 
    @guideline = Guideline.where(title: params[:title]).first 
end 

то в ваших взглядах, вы можете использовать

seeguideline_path(@guideline.title) 

но вы также должны заботиться о недопустимых символов в название, которое будет использоваться в URL-адресе.

+0

спасибо - что все это имеет смысл. Но это не приводит меня в нужное место (т. Е. Собирается/заголовок, но не загружает руководство) - он говорит, что «страница, которую вы ищете, не существует» – tessad

+0

вы можете обновить свой вопрос с помощью своих маршрутов и вашего контроллера правил ? – jvnill

+0

обновили их сейчас – tessad

Смежные вопросы