ruby on rails link_to вновь созданная страница - PullRequest
2 голосов
/ 16 января 2011

Я создал в rails (3) новую html-страницу в модели моего проекта с именем contact.html.erb, и мне интересно связать ее с другой страницей, я добавил код:

<%= link_to 'contact', contact_project_path(@project) %>

Проект - это модель, которая belongs_to является пользователем (который является контактом на странице контактов).

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

Что мне не хватает?

Я довольно долго искал решение и нигде не нашел ответа на этот вопрос. Я знаю, что это немного базово, но у меня нет других вариантов.

Ответы [ 2 ]

4 голосов
/ 16 января 2011

- ПЕРЕСМОТРЕННЫЙ ОТВЕТ Основываясь на комментариях, я вижу, что вы не пытаетесь связать модель контакта, просто представление. В этом случае вам все равно нужно изменить файл маршрутов, но вам нужно решить, хотите ли вы получить одну страницу контактов для всех проектов или одно представление контактов для каждого проекта. IE:

# Collection Contact
example.com/projects/contact # IE One contact view for all projects

# Member Contact
example.com/projects/1/contact # IE One contact view per project

В любом случае вам нужно использовать блок для ресурса проекта в файле маршрутов. Итак, если вы хотите, чтобы была одна контактная страница для коллекции (все проекты), выполните:

resources :projects do
  collection do
    get 'contact'
  end
end

Или, если вы хотите, чтобы один просмотр контактов на одного участника (по одному на проект), выполните:

resources :projects do
  member do
    get 'contact'
  end
end

В любом случае это даст вам вспомогательные методы, которые вы можете поместить в link_to

Для коллекции это должно быть contact_projects_path (без аргументов), а для членов должно быть contact_project_path(@project) (передать в качестве аргумента проект.

Вы можете использовать get post put delete или match в качестве параметра в коллекции или блоке-члене, который просто сообщает Rails, какой тип запроса обрабатывать по этому URL, и какие помощники генерировать. Для нормального просмотра вам нужен запрос GET.

Надеюсь, это, наконец, ответит на ваш вопрос:)

-ОРИГИНАЛЬНЫЙ ОТВЕТ-

Это для маршрутизации на МОДЕЛЬ, а не только на представление

Добавить в ваши маршруты.rb:

resources :projects do
  resource :contact
end

Если я правильно понимаю ваш вопрос, это должно создать помощника с именем project_contact_path ().

Эта запись будет projects/123/contact.

Если вам нужно более одного контакта на проект, вам нужно сделать его множественным (ресурс: контакты). Тогда ваши записи будут выглядеть как projects/123/contacts/123.

См. http://guides.rubyonrails.org/routing.html

Вы бы связались с этим с помощью link_to( project_contact_path(@project) ), если в проекте только один контакт, или link_to( project_contact_path(@project,@contact) ), если в проекте несколько контактов.

0 голосов
/ 16 января 2011

Посмотрите здесь:

http://edgeguides.rubyonrails.org/routing.html

Вы должны знать, что contact_project_path(@project) не является спокойным маршрутом (если только contact_project не является моделью, но у нее мало шансов). Вам нужно будет объявить это имя, используйте :as

...