19

Aşağıdaki dizin yapısına sahip istiyorum:Rails'in kısmi görüntüleme aramasına nasıl bir görünüm yolu ekleyebilirim?

Bence
views/ 
    app1/ 
    users/_user.html.erb 
    users/index.html.erb 

    app2/ 
    users/index.html.erb 

    shared/ 
    users/_user.html.erb 
    users/index.html.erb 

, ben/Uyg2 kontrol etmek Raylar anlatmak, nasıl Yani temelde

# app1/users/index.html 
<%= render :partial => "user" %> 
# => /app1/users/_user.html.erb 


# app2/users/index.html 
<%= render :partial => "user" %> 
# => /shared/users/_user.html.erb 

derim/Kullanıcılar dir sonra paylaşımlı dir o eksik şablon hatası eksik yükseltir önce?

İşte File.exist?

kullanarak Senthil önerdiği gibi (bu sorunu var


Update, benim çözüm - geri bildirim ve önerilerde rayların yerleşik bir şey zaten var

# application_helper.rb 

# Checks for a partial in views/[vertical] before checking in views/shared 
def partial_or_default(path_name, options={}, &block) 
    path_components   = path_name.split("/") 
    file_name    = path_components.pop 
    vertical_file_path  = File.join(vertical}, path_components, file_name) 
    shared_file_path  = File.join("shared", path_components, file_name) 
    full_vertical_file_path = File.join("#{Rails.root}/app/views/", "_#{vertical_file_path}.html.erb") 
    attempt_file_path  = File.exist?(full_vertical_file_path) ? vertical_file_path : shared_file_path 
    render({:partial => attempt_file_path}.merge(options), &block) 
end 
+1

Dosyadan çıkıp uygun dosyayı oluşturup oluşturmadığını kontrol etmek için 'File.exists?' Kullanamazsınız? –

cevap

61

karşıladıklarını sizin için bu "temalı" türünü kolaylaştırır.Bu prepend_view_path olarak adlandırılır.

http://api.rubyonrails.org/classes/ActionView/ViewPaths/ClassMethods.html#method-i-prepend_view_path

da arama istifin ucuna yolları eklemek için append_view_path var.

Ben bu başarıyla üretimde çalışan:

class ApplicationController < ActionController::Base 
    before_filter :prepend_view_paths 

    def prepend_view_paths 
    prepend_view_path "app/views/#{current_app_code}" 
    end 
end 

Şimdi her kontrolör ilk (Dinamik adı olarak çıkıyor ya neyse) "görüntüleme/Uyg1" görüneceğini olmak eyleme gelen görünümler için aradı.

Ayrıca, aradığınız dosyanın tüm tanımlanmış yollarını da denetleyecek kadar akıllıdır, bu nedenle bulunmazsa varsayılan konuma geri döner.

+0

Bu gerçekten harika! Keşke bu uygulamayı yapabilseydik ... btw bu sadece demiryollarında açıklanmıştı.269 (ama cevabınız herşeyi anlatıyor) – ecoologic

+1

Doğru URL: http://api.rubyonrails.org/classes/ActionController/Base. html # M000267 – davidcollom

+0

Eski, ancak bunun yerine bir filtre ile bunun yerine bir sınıf yöntemi var –

İlgili konular