2013-07-08 1 views
0

Можно ли сгруппировать визуализации метод для нескольких методов?Rails: Можно ли группировать «рендер» для нескольких методов?

Вот мой случай: многие методы моего контроллера имеют один и тот же вид. Только изменения данных (данные будут использоваться для выбора опции по умолчанию для поля ). P.S .: Я знаю, что есть лучший способ сделать это (например, использовать метод ), но цель состоит в том, чтобы иметь более сексуальный URL-адрес (см. Ниже).

def index 
end 

def flower 
    @object = flower 
    render 'index' 
end 

def car 
    @object = car 
    render 'index' 
end 

... (other objects) 

Это должно быть в состоянии использовать матч в routes.rb файла:

match 'flower', :to => 'objects#flower' 
match 'car', :to => 'objects#car' 
... 

Итак, для того, чтобы не повторяться, я могу группировать же оказывать для многих методов?

Спасибо,

ответ

0

Вы можете использовать after_filter:

after_filter :render_index 

def render_index 
    render 'index' 
end 
+0

Спасибо Talgat, но не все мои методы используют один и тот же файл рендеринга. Поэтому я получаю _multiple render_ ошибку, когда я указываю вид рендеринга в методе (** create ** например.) – htaidirt

+1

Вы можете использовать: только атрибут, 'after_filter: render_index,: only => [: create,: some_action]' Посмотрите здесь, чтобы узнать подробности http://apidock.com/rails/ActionController/Filters/ClassMethods/before_filter –

+0

К сожалению, это закончилось ** Исправлена ​​ошибка шаблона ** Ошибка: _Имя шаблонных объектов/цветок, приложение/цветок с {: locale => [: en],: formats => [: html],: handlers => [: erb,: builder,: coffee,: haml]} ._! – htaidirt

0

Вы могли бы попробовать что-то вроде:

get ':source', :to => 'objects#index', constraints: {source: /\A(flower|car|etc)\z/} 

def index 
    @object = send(params[:source]) if params[:source].present? 
end 

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

+0

Спасибо Крису. Мне нравится решение, которое вы предложили, но его применение возвращает _500 Internal Server Error: undefined method 'flower 'для # _ !! Есть идеи? – htaidirt

+0

Использование _rake routes_ возвращает: GET /:object(.:format) object # index {: object =>/(flower | car | cat) /} – htaidirt

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