Проблема с пользовательскими маршрутами в Rails - PullRequest
2 голосов
/ 02 июня 2009

У меня есть эта строка в маршрутах:

map.resources :questions, :new => {:vote_for => :put, :vote_against => :put}, :has_many => :replies, :shallow => true

И я использую следующие помощники на мой взгляд:

link_to 'OK', vote_for_question_path(@question), :method => :put
link_to 'NO', vote_against_question_path(@question), :method => :put

Но, к сожалению, что-то не так с моим кодом, как говорит Rails:

undefined method `vote_for_question_path' for #

Что не так?

1 Ответ

2 голосов
/ 02 июня 2009

Похоже, ваш синтаксис маршрута неправильный.

Если вы хотите добавить новые членские маршруты (то есть те, которые применяются к одному экземпляру ресурса), то вы должны сделать:

map.resources :questions,
              :member => { :vote_for => :put, :vote_against => :put },
              :has_many => :replies, :shallow => true

С другой стороны, если вы хотите переопределить стандартный «новый» сегмент URL, то это будет:

map.resources :questions, :path_names => { :new => 'vote_for' },
              :has_many => :replies, :shallow => true

- обратите внимание, что соответствующее действие контроллера все равно будет называться "new". Это позволило бы URL-адреса, такие как:

/ вопросы / vote_for

Однако, глядя на то, что вы пытаетесь сделать, вы можете подумать о создании нового ресурса Vote. Это будет создано, когда пользователь проголосует за вопрос, и будет соответствовать стандартным соглашениям RESTful-маршрутизации Rails. Голосование по вопросу может иметь URL-адрес, например:

/ вопросы / 22 / голосов / новый

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...