Как сделать Switch на основе контроллера с ruby ​​на рельсах? - PullRequest
0 голосов
/ 01 июня 2010

Как можно переключиться в рубине на рельсы что-то вроде:

case controller "home" 
  do home
case controller "about"
  do about
else 
  do home

У меня сейчас есть этот код:

<% case current_page(:controller) %>
      <% when "forums" %>
          <%= render :partial => 'shared/sidebar/sidebar_forums' %>
      <% when "events" %>
          <%= render :partial => 'shared/sidebar/sidebar_events' %>
      <% else %>
          <%= render :partial => 'shared/sidebar/sidebar_frontpage' %>
      <% end %>

Ответы [ 2 ]

2 голосов
/ 01 июня 2010

Цитирование из http://rails.nuvvo.com/lesson/6371-action-controller-parameters:

Хэш params всегда будет содержать ключи :controller и :action, но вы должны вместо этого используйте методы controller_name и action_name для доступа к этим значениям. Любые другие параметры, определенные маршрутизацией, такие как :id, также будут доступны.

Так что вы определенно должны иметь доступ к нему через params[:controller], и, если метод controller_name находится в области видимости, вы должны использовать его вместо этого.

Что касается самого синтаксиса коммутатора, вам нужно сделать это как

case controller_name
when "home"
  do_home
when "about"
  do_about
else
  do_default
end

Вы могли бы взломать и получить

case true
when controller "home"
  do_home
when controller "about"
  do_about
else
  do_default
end

Но почему?

1 голос
/ 01 июня 2010

Всякий раз, когда вам приходилось делать что-то подобное, это означает, что что-то не так с дизайном приложения. Не то чтобы я никогда не делал этого в прошлом, но я не делаю этого сейчас, и это осуждается.

Вместо того, чтобы делать то, что вы делаете сейчас, если вы присваиваете имена своим контроллерам в соответствии с их обязанностями, в конце концов, они являются просто классами и обрабатывают запросы, поступающие от пользователей и т. Д., Тогда вам, возможно, не придется делать это переключение заявление. Например, после присвоения им пространства имен у вас могут быть разные макеты, составленные из разных частичек для ваших представлений, которые могут не требовать от вас этого переключения в вашем контроллере / представлениях, следовательно, сохраняя код чистым.

...