2014-04-01 19 views
7

tôi đã tìm thấy rất nhiều nguồn lực cho Rails 3, nhưng không ai cho Rails 4:Rails 4 - Tên bố cục hiện tại?


Trong một nỗ lực để giữ cho mọi thứ DRY, chúng tôi có một phương pháp trong đó xác định một số thẻ meta. Tôi muốn đưa vào cách bố trí trong title param:

Chỉ
#app/controllers/application_controller.rb 
    before_action :set_meta_tags 

    def set_meta_tags 
    title = (layout != "application") ? "#{layout} ::" : false 
    set_meta title: "#{layout} #{setting(:site, :title)}", description: setting(:site, :description) 
    end 

vấn đề là tôi không biết làm thế nào để trả lại bố trí hiện tại trong Rails 4 - bất kỳ trợ giúp sẽ được đánh giá cao!

Trả lời

7

Trong Rails 5, mã này là:

controller.send :_layout, ["some_string_here"] 

Tôi không biết tại sao nó cần một chuỗi trong mảng nhưng đó là những gì đã nhận nó làm việc cho tôi. Tệp trợ giúp của chúng tôi có dạng như sau:

def current_layout 
    layout = controller.send :_layout, ["test"] 
    return layout.inspect.split("/").last.gsub(/.haml/,"") 
end 
5

Bạn có thể thêm sau trong ApplicationHelper:

def current_layout 
    (controller.send :_layout).inspect.split("/").last.gsub(/.html.erb/,"") 
end 

Và bạn có thể gọi nó là phù hợp trong set_meta_tags phương pháp. Một cái gì đó như thế nào,

def set_meta_tags 
    title = (current_layout != "application") ? "#{current_layout} ::" : false 
    set_meta title: "#{layout} #{setting(:site, :title)}", description: setting(:site, :description) 
    end 

LƯU Ý:

.inspect mang lại cho tôi tên bố trí với đường dẫn tương đối của nó.

.split("/").last sẽ xóa đường dẫn tương đối và chỉ trả về tên bố cục (có phần mở rộng).

.gsub(/.html.erb/) xóa phần mở rộng của bố cục. Bạn có thể cần điều chỉnh extension dựa trên công cụ mẫu bạn đang sử dụng, ví dụ: Trong trường hợp sử dụng Haml .html.haml.


My Giải pháp

Từ một cuộc trò chuyện với Kirti, dường như tôi quên đề cập đến chúng tôi đã tự đặt ra layout là một vấn đề lớn. Điều này sẽ có tác dụng nếu bạn tự đặt bố cục của bạn:

#app/helpers/application_helper.rb 
def current_layout 
    self.send :_layout 
end 

def set_meta_tags 
    title = (current_layout != "application") ? "#{current_layout.titleize} :: " : "" 
    set_meta title: title + setting(:site, :title), description: setting(:site, :description) 
end 
+0

Spasibo! Hãy để tôi thử nó ra –

+0

Trên thực tế, giữ trên nó không hoạt động rất tốt - hãy để tôi gỡ lỗi –

Các vấn đề liên quan