Трябва да диагностицирате routes.rb за приложението, за да добавите английски/испански към приложението Rails 3

Следя Ryan Bates railscasts I18n Internationalization и срещам проблем/въпрос.

Опитвам се да задам езика в моята връзка, нещо подобно:

http://localhost:3000/en/site/services за английски

и

http://localhost:3000/es/site/services за испански

Дефинирам това в моя файл с маршрути тук:

routes.rb

scope ":locale" do
  get "site/home"
  get "site/about_us"
  get "site/faq"
  get "site/discounts"
  get "site/services"
  get "site/contact_us"
  get "site/admin"
  get "site/posts"
  get "categories/new_subcategory"
  get "categories/edit_subcategory"
end

и имам в моето приложение контролер

before_filter :set_locale

private
  def set_locale
  I18n.locale = params[:locale] if params[:locale].present?
end

def default_url_options(options = {})
  {locale: I18n.locale}
end

И в моите views/layouts/application.html.erb

<%= link_to_unless_current "English", locale: "en" %> |
<%= link_to_unless_current "Spanish", locale: "es" %> 

Сега, когато се опитам да стартирам рейк маршрути или да отида до URL адреса, получавам

C:\www\project>rake routes
  rake aborted!
  missing :controller

Сравнително нов съм в маршрутите, може ли някой да ми помогне да видя/обясня проблема? Благодаря предварително.


person ruevaughn    schedule 04.04.2012    source източник


Отговори (1)


Току-що поставих целия код, който публикувахте, в ново приложение за релси и той проработи. Предполагам, че имате други маршрути във вашия файл routes.rb и един от тях е невалиден. Публикуваните от вас маршрути изглеждат така:

mike@sleepycat:~/projects/testproj$ rake routes
site_home GET /:locale/site/home(.:format)               :locale/site#home
site_about_us GET /:locale/site/about_us(.:format)       :locale/site#about_us
site_faq GET /:locale/site/faq(.:format)                 :locale/site#faq
site_discounts GET /:locale/site/discounts(.:format)     :locale/site#discounts
site_services GET /:locale/site/services(.:format)       :locale/site#services
site_contact_us GET /:locale/site/contact_us(.:format)   :locale/site#contact_us
site_admin GET /:locale/site/admin(.:format)             :locale/site#admin
site_posts GET /:locale/site/posts(.:format)             :locale/site#posts
categories_new_subcategory GET /:locale/categories/new_subcategory(.:format)  :locale/categories#new_subcategory
categories_edit_subcategory GET /:locale/categories/edit_subcategory(.:format) :locale/categories#edit_subcategory

Въпреки че може да сте способни на нещо подобно, въпросът е трябва ли. Горещо препоръчвам да прочетете за ориентираната към ресурси архитектура, ако все още не сте запознати с нея. Не бих предложил да огъвате Rails в странни форми, докато не разберете добре това. Концепцията, на която се основава маршрутизирането на Rails, и това, което се случва в routes.rb, няма да има много смисъл, докато не разберете това.

Има много налични в интернет и една добра книга, която изясни нещата за мен, е Restful Web services от Леонард Ричардсън и Сам Руби. Надявам се това да помогне.

person mikewilliamson    schedule 04.04.2012
comment
Прав си, имам други маршрути и всъщност ги стесних. Имам нужда да разбера повече спокойната маршрутизация, ще проверя тази книга. Също така ще прочета отново ръководствата на Ruby on Rails за маршрутизиране. Ще бъде ли по-приемлива версия: ресурси сайтове: и след това добавяне на куп маршрути за членове? Нямам нужда от CRUD за контролера на моите сайтове, само от действията, които ще бъдат статични (дом, продукти и т.н.). Това ли е най-добрата практика за това? - person ruevaughn; 05.04.2012
comment
Преди съм минал по пътя на контролер на сайт и може да бъде накаран да работи. Останах с Rails (вместо да монтирам приложение на Sinatra, което да се грижи за статичните страници или нещо подобно), защото исках тези статични страници да могат да се актуализират и знам, че ще трябва да се справя с проблеми с I18n в целия сайт. В крайна сметка имах контролер, представляващ организацията с неща от типа about, contact и home като свойства на една организация, съхранена сама по себе си в db. Всичко останало беше Rails CRUD. Работи, но винаги се чудя дали има по-добър начин. - person mikewilliamson; 05.04.2012
comment
Страхотно, точно това е моята ситуация, аз също искам „статичните“ страници да могат да се актуализират. Но имам нужда само от предния край, за да превключвам езици, а не от задния, поради което се опитвах да обвия обхвата само около моите „статични“ страници от предния край, ако това има смисъл. След като сте минали по този път, има ли други съвети за този вид сайт, що се отнася до структурата, или нещо друго, за което можете да се сетите? - person ruevaughn; 05.04.2012
comment
Публикувах нов въпрос, не се колебайте да го разгледате. stackoverflow.com/ въпроси/10036167/ - person ruevaughn; 06.04.2012