2016-05-31 3 views
0

У меня есть два контроллера (шаблон и оценка), разделяющие одно действие вида. в индексной странице у меня есть следующий код:тег link_to, используемый для двух контроллеров с общим (одним) представлением

- if can? :create, Estimate 
    = link_to "New Estimate", eval("new_#{params[:controller].singularize}_path"), class: 'btn btn-primary btn-xs', data: ajax_modal_data("form") 

Я хочу link_to «Новая оценка», чтобы изменить «Новые шаблоны» на странице индекса, когда используется контроллер шаблона.

ответ

1

Некоторые заметок: попытаться избежать #eval метода в рельсах и params переменных вне кода контроллера, так:

= link_to "New #{env.camelize}", send(:"new_#{env}_path"), class: 'btn btn-primary btn-xs', data: ajax_modal_data("form") 

и вызова контроллера для отображения:

render :index, locals: { env: safe_controller_name } 

def safe_controller_name 
    controllers = %w(templates estimates) 
    if ! controllers.include? params[:controller] 
     raise 
    end 
    params[:controller].singularize 
end 
+0

Спасибо за быстрый ответ , Я попробовал и получил «неопределенную локальную переменную или метод« env »для # ..... ошибок – Kourosh

+0

, как вы передаете ее на страницу индекса представления? – Kourosh

+0

он работал, как только я заменил представление на inde x, также # отсутствовал в send (: "new_ {env} _path"). Спасибо за вашу помощь – Kourosh

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