Запутался в настройке маршрутов - Rails 3.1 - PullRequest
0 голосов
/ 16 ноября 2011

Я думаю, что столкнулся с конфликтом из-за имен:

Две модели: store coupon

Требуется URL, который будет отображать купоны: http://localhost/coupons/:store_name ('купоны' записаны в URL, не заменены ничем)

Имя контроллера: coupons_controller

Вот то, что я сейчас имею в своих маршрутах:

match '/coupons/:store_name' => 'coupons#index', :as => :stores

Когда я пытаюсь сделать redirect stores_path(store) в другом контроллере, я получаю эту ошибку:

No route matches {:controller=>"coupons"}

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

UPDATE

Есть ли какое-то центральное место, чтобы сказать динамическим функциям _path () использовать определенную структуру URL? т.е. вместо того, чтобы делать везде:

redirect_to stores_path(:store_name => store.store_name)

Вместо этого используйте просто:

redirect_to stores_path(store)

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

да, можно переопределить to_param в вашей модели:

class Store < ...
  def to_param
    store_name
  end
end
1 голос
/ 16 ноября 2011
redirect_to stores_path(:store_name => store)

должно работать, если не работает (не может подтвердить прямо сейчас), вы должны быть в состоянии сделать (немного хакерски)

redirect_to stores_path+"?store_name=yourstorename"

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

resources :stores do
  resources :coupons # this will give you e.g. /stores/:store_id/coupons for the coupons#index action
end

Если вы хотите использовать имя магазина вместо идентификатора, просто найдите SO для использования "slug" или посмотрите здесь: получениеURL на основе 'name' в маршрутах RESTful вместо URL на основе идентификатора или ID + имя слага в URL в Rails (как в StackOverflow)

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