将 Rails 助手作为一个类



我发现自己在编写帮助程序以使我的观点非常干净;但是帮助程序并不自然地作为类出现,只是模块内部的方法集合。 因此,这些方法不会像使用参数调用初始化时那样共享数据。 所以我最终会多次传递数据。 很烦人。 有没有办法把那里放在一个共享价值观的类中?

这是我试图干涸的一个例子——是的,它远非最佳代码,请专注于我试图解决的问题;我宁愿不浪费时间做一个完美的例子。 在下面,选项正在传入,但我最终将它们传递给其他方法等。

module Dashboard::DashboardHelper
def menu_item(link_ref, options={})
title           = options.fetch(:title,     "")
details         = options.fetch(:details,   "")
highlight       = options.fetch(:highlight,     false)
icon            = options.fetch(:icon,      "")
first           = options.fetch(:first,     false)
subs            = options.fetch(:subs, [])
link_item_class = (first) ? "m-t-30" : " "
content_tag(:li, 
menu_link_label(link_ref,title,details,icon,highlight), 
class: link_item_class
)
end
def menu_link_label(link_ref, title, details, icon, highlight)
link_to(menu_labels(title,details), link_ref, class: "detailed") +
icon_thumbnail(icon,highlight)
end
def menu_labels(title, details)
content_tag(:span, title, class: "title") +
content_tag(:span, details, class: "details")       
end
def icon_thumbnail(name, family, highlight=true)
classes = (highlight) ? "bg-success icon-thumbnail" : "icon-thumbnail"
content_tag(:span,icon(name, family), class: classes)
end
def icon(name)
(name.present?) ? content_tag(:i, nil, class:"fas fa-#{name}") : ""
end
end

编辑:

选项哈希直接来自视图,通常采用以下形式:

<%= menu_item dashboard_root_path, 
title: "Dashboard", 
details: "12 New Updates", 
icon: "fe:home",
first: true,
highlight: true
%>

没有什么能阻止你自己上一些课,例如 在视图中app/view_helpers和使用它们

# app/view_helpers/menu.rb
class Menu
attr_accessor :options
def initialize(options={})
# do something with your options
# self.options[:header] = options.fetch(:header, '')
end
def header
# use your options here
content_tag(:h1, options[:header])
end
end

# some_controller.rb
def index
@menu = Menu.new
end

# index.html.erb
<%= @menu.header %>

最新更新