I've found numerous resources for Rails 3, but none for Rails 4:
In an effort to keep things DRY, we have a method which defines some meta tags. I'd like to include the layout in the title param:
  #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
Only problem is I don't know how to return the current layout in Rails 4 - any help will be greatly appreciated!
For me in Rails 6 the current_layout method would look like this
def current_layout
  self.controller.send :_layout, self.lookup_context, []
end
I believe the array is a list of formats used. The method _layout is build dynamically and I'm not sure what it's expecting in the formats parameter, but I got my desired behaviour with just an empty array
Hope this helps.
In Rails 5, the code is:
controller.send :_layout, ["some_string_here"]
I don't know why it needs a string in the array but that's what got it working for me. Our helper file looks as follows:
def current_layout
  layout = controller.send :_layout, ["test"]
  return layout.inspect.split("/").last.gsub(/.haml/,"")
end
                        You can add the following helper method in ApplicationHelper:
def current_layout
     (controller.send :_layout).inspect.split("/").last.gsub(/.html.erb/,"") 
end
And you can call it accordingly in set_meta_tags method. Something like,
  def set_meta_tags
    title = (current_layout != "application") ? "#{current_layout} ::" : false
    set_meta title: "#{layout} #{setting(:site, :title)}", description: setting(:site, :description)
  end
NOTE:
.inspect gives me the layout name with its relative path.
.split("/").last will remove the relative path and returns just the layout name(with extension).
.gsub(/.html.erb/) removes the extension part of layout. You may need to adjust the extension based on the template engine you are using e.g. In case of Haml use .html.haml.
My Solution
From a chat with Kirti, it seems that my forgetting to mention we had manually set out layout was a big deal. This will work if you manually set your layout:
#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
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With