ссылка на метод в рельсах через функцию link_to - PullRequest
0 голосов
/ 15 августа 2011

Недавно я добавил новый метод (называемый «справка») в свой контроллер проектов (projects_controller.rb) и создал «help.html.haml» в каталоге представлений.

Я добавил следующий маршрут в route.rb:

 resources :users, :only => [:new, :create, :edit, :update, :help]
 resources :projects, :module => 'users' do
   get  :help, :on => :member, :as => :help
 end

Моя цель - создать ссылку в отдельном представлении (назовем его index.html.хам), который будет ссылаться на help.html.haml. Примечание: в настоящее время мои маршруты настроены для отображения справки со следующим URL: http://localhost:3001/projects/id/help

К сожалению, я не знаюкак написать код для ссылки на URL справки, указанный выше.На данный момент у меня есть следующий код в index.html.haml:

 %li= link_to 'quick help', project_path(@project)

, но этот код приводит меня только к http://localhost:3001/projects/id. Можно ли добавить «/ help» к URLиспользуя функцию link_to, или есть лучший способ сделать это?

Я искренне благодарен за любую помощь.Большое вам спасибо за ваше время!

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Давайте посмотрим на компоненты маршрута, который вы определили:

get :help, :on => :member, :as => :help
  • Первый параметр - :help, это имя действия, которое будет вызвано.
  • Вторая часть - :on => :member, что означает, что действие ограничено определенной записью. Итак, вам нужно будет передать идентификатор, чтобы вызвать его.
  • Третья часть, :as => :help, определяет имя вспомогательного метода, который вы можете использовать для генерации URL. Это то, что вы ищете.

По сути, help_project_path(@project) будет генерировать URL, который вам нужен. Итак, ссылка будет выглядеть так:

%li= link_to 'quick help', help_project_path(@project)

Обратите внимание, что вам не нужен путь :as => :help, по умолчанию он должен быть help. Обычно используется, если вам нужно другое имя помощника.

Еще одна вещь, которую я хотел бы отметить, это то, что вы не создаете «ссылку на help.html.haml», вы создаете ссылку на действие help на контроллере projects. Действие может перенаправить куда-нибудь, если это необходимо, вам не нужно отображать представление. Я просто говорю это, потому что, похоже, вы все еще немного новичок в этом, извините, если я просто неправильно понял.

0 голосов
/ 15 августа 2011

Что делает метод help ?Это метод справки для каждого проекта, или это помощь для проектов в целом.Вы можете создать маршрут следующим образом:

match '/projects/help/:id' => 'projects#help', :via => :get

для: через, вы выбираете метод REST, т.е. либо GET, POST, PUT и т. Д., В соответствии с вашими требованиями.пытаясь создать страницу помощи для проектов в целом, это может быть бесполезно.Всякий раз, когда у вас есть URL-адрес / projects / <> , Rails попытается направить его на страницу показа проекта и попытается использовать <> в качестве идентификатора проекта.

Ссылка, которую вы используете, с project_path (@project) приведет вас на страницу проекта show для объекта @project.

Итак, наконец, это то, что вы должны сделать.Я бы посоветовал вам создать отдельный контроллер, который используется для общих страниц.Скажем, у вас есть контроллер OtherController

match '/help', :controller => 'other', :action => 'help', :via => :get

и затем создайте страницу help.html.erb для представления.Надеюсь, это работает для вас.

...