2015-10-07 4 views
2

У меня есть частичная часть демонстрации в приложениях/views/app1/users, похожих на это this solution. Я уже пробовал использовать prepend_view_path, как в вышеупомянутом решении, но безрезультатно.Как добавить настраиваемый вид частичного пути к Rails 4.2 lookup?

Haml:

#demonstration 
= f.semantic_fields_for :demonstration do |ud| 
    = render 'demonstration_fields', :f => ud 

Но я получаю эту ошибку:

Missing partial app1/_demonstration_fields, application/_demonstration_fields with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :haml]}. Searched in: 

Единственный способ сделать это работа, чтобы пройти полный путь, чтобы сделать следующим образом:

= render 'app1/users/demonstration_fields', :f => ud 

Но это наносит ущерб попытке избежать избыточного кода (например, sp выравнивание полного пути) через prepend_view_path. Есть ли способ избежать прохождения по всему пути?

+0

Возможный дубликат [Как PREPEND рельсам просмотра пути в рельсах 3.2 (ActionView :: PathSet)] (http://stackoverflow.com/questions/10864108/how-to-prepend-rails-view-paths-in-rails-3-2-actionviewpathset) –

+0

Так почему бы не переместить демонстрационное поле в путь, который работает? Например, общая папка? 'shared/users/demonstration_fields' – miler350

+0

@ miler350, в моем конкретном случае я фактически использую летние папки, такие как« users_2014 », и хочу, чтобы частичные сегменты сегментировали по году - это очень специфическая настройка. – Nona

ответ

0

Вы можете переопределить метод ActionView::ViewPaths.local_prefixes частного класса, каждый контроллер в Rails получает вперемешку Комментарий выше методы даже говорит:.

Override this method in your controller if you want to change paths prefixes for finding views

«Виды», в данном контексте, также будет означать партиалы. Таким образом, вы можете добавить следующую строку в ваш App1Controller:

class App1Controller < ApplicationController 
    def self.local_prefixes 
    [controller_path, "#{controller_path}/users"] 
    end 
    private_class_method :local_prefixes 
end 

Затем, когда вы render 'demonstration_fields', :f => ud, ваш путь поиска должен выглядеть (в порядке убывания):

app1/_demonstration_fields, 
app1/users/_demonstration_fields, 
application/_demonstration_fields` 
Смежные вопросы