2009-06-02 2 views
2

У меня есть эта линия в маршруты:Проблема с пользовательскими маршрутов в Rails

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 #

Что случилось?

ответ

2

Похоже, что ваш синтаксис маршрута неверен.

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

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 

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

/вопросы/vote_for

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

/questions/22/votes/new

+0

Спасибо, это работает! Я бы хотел использовать соглашения RESTful (как вы сказали), но я понятия не имею, как указать, является ли голосование +1 или -1 использованием/questions/22/votes/new :( – collimarco

+0

Трудно дать вам указания не зная больше о вашем приложении. Основная идея заключается в том, что ваша модель вопроса будет связана с моделью голосования, которая, вероятно, будет связана с моделью пользователя. Когда я проголосовал за вопрос, этот экземпляр Vote будет добавлен в коллекцию голосов для этого вопроса. Для a -1 оно будет удалено. –

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

  • Нет связанных вопросов^_^