Простейший маршрут с переменной и строкой?- Рельсы 3.1 - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть store модель со следующим:

  def to_param
    slug + "-info"
  end

URL будут выглядеть следующим образом:

/dell-info
/ibm-info
/apple-info

Мой маршрут для этого явно неправильный:

match '/:slug-info' => 'stores#info', :as => :stores

Как я могу это исправить?Если я использую match '/:slug(-info)' в качестве маршрута, он работает, но соответствует ОБА /dell и /dell-info

1 Ответ

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

Вы можете добавить некоторые ограничения к маршруту, а затем удалить "-info" в вашем контроллере:

match '/:slug' => 'stores#info', :as => :stores, :constraints => { :slug => /-info$/ }

и затем в вашем контроллере:

def info
  slug = params[:slug].sub(/-info$/, '')
  #...
end

Или, лучше, иметь метод в вашей модели, который может удалить суффикс "-info", пока он ищет объект на основе slug:

# In the model
def self.for_slug(slug)
  slug = slug.sub(/-info$/, '')
  find_by_slug(slug)
end

# In the controller
def info
  thing = Thing.for_slug(params[:slug])
  #...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...