如何在 rails 的 ruby 视图中显示 html?
how do you display a html in view on ruby on rails?
我有一个模块应该根据用户角色呈现菜单。
我们曾经使用 cancancan
gem 但自从我们有了新规范后,它就被弃用了。
我有这样的联想。 many_to_many 与 User
和 Role
的关系,另一个 many_to_many 与 Role
和 Menu
的关系,因此 User
具有嵌套many_to_many 与 Menu
的关系。
我想做的是根据用户角色呈现菜单。所以我有这个辅助模块:
module MenuHelper
# ! MENU MAPPING ===============================
MENU_NAMES = {
orders: '<%= main_menu_tree Spree.t(:orders), icon: "shopping-cart", sub_menu: "orders", url: "#sidebar-orders" %>',
workflows: '<%= tab *Spree::BackendConfiguration::WORKFLOW_TABS, label: Spree.t(:workflows), icon: "flash" %>',
}
# ! MENU MAPPING ===============================
# this will return menu names
# @params {ARRAY} menu_names are the allowed menu that the user can access by its role
# @returns {ARRAY}
def user_menus(menu_names = [])
samp_arr = []
menu_names.each do |m_n|
samp_arr << MENU_NAMES[:"#{m_n.downcase}"]
end
samp_arr
end
end
在我的 shared/_menu.html.erb
上有这个。
<% spree_current_user.menus.pluck(:name).each do |n|%>
<ul>
<%= n%>
</ul>
<% end %>
在视图中它会变成一个字符串。我预料到了这种行为,但有没有办法将其作为一种方法进行评估?因为 main_menu_tree
和 tab
只是一种方法,或者您可以建议一种更好的方法来解决这个问题?谢谢。
因为您有menu_names
,您可以为每个菜单创建一个新模板(我们将其命名为部分),请参见示例:
app/
views/
menus/
_menu_name_1.html.erb
_menu_name_2.html.erb
如果您创建这些部分,您应该能够执行以下操作:
<% spree_current_user.menus.pluck(:name).each do |menu_name| %>
<ul>
<%= render "menus/#{menu_name}" %>
</ul>
<% end %>
它将菜单的名称与要呈现的文件的路径连接起来,一切都应该可以正常工作!
我有一个模块应该根据用户角色呈现菜单。
我们曾经使用 cancancan
gem 但自从我们有了新规范后,它就被弃用了。
我有这样的联想。 many_to_many 与 User
和 Role
的关系,另一个 many_to_many 与 Role
和 Menu
的关系,因此 User
具有嵌套many_to_many 与 Menu
的关系。
我想做的是根据用户角色呈现菜单。所以我有这个辅助模块:
module MenuHelper
# ! MENU MAPPING ===============================
MENU_NAMES = {
orders: '<%= main_menu_tree Spree.t(:orders), icon: "shopping-cart", sub_menu: "orders", url: "#sidebar-orders" %>',
workflows: '<%= tab *Spree::BackendConfiguration::WORKFLOW_TABS, label: Spree.t(:workflows), icon: "flash" %>',
}
# ! MENU MAPPING ===============================
# this will return menu names
# @params {ARRAY} menu_names are the allowed menu that the user can access by its role
# @returns {ARRAY}
def user_menus(menu_names = [])
samp_arr = []
menu_names.each do |m_n|
samp_arr << MENU_NAMES[:"#{m_n.downcase}"]
end
samp_arr
end
end
在我的 shared/_menu.html.erb
上有这个。
<% spree_current_user.menus.pluck(:name).each do |n|%>
<ul>
<%= n%>
</ul>
<% end %>
在视图中它会变成一个字符串。我预料到了这种行为,但有没有办法将其作为一种方法进行评估?因为 main_menu_tree
和 tab
只是一种方法,或者您可以建议一种更好的方法来解决这个问题?谢谢。
因为您有menu_names
,您可以为每个菜单创建一个新模板(我们将其命名为部分),请参见示例:
app/
views/
menus/
_menu_name_1.html.erb
_menu_name_2.html.erb
如果您创建这些部分,您应该能够执行以下操作:
<% spree_current_user.menus.pluck(:name).each do |menu_name| %>
<ul>
<%= render "menus/#{menu_name}" %>
</ul>
<% end %>
它将菜单的名称与要呈现的文件的路径连接起来,一切都应该可以正常工作!