簡體   English   中英

如何在Rails上的ruby中顯示html?

[英]how do you display a html in view on ruby on rails?

我有一個模塊,應根據用戶角色呈現菜單。 我們曾經使用cancancan gem,但是由於有了新的規范,因此不推薦使用。

我有一個像這樣的協會。 UserRole many_to_many關系,與RoleMenu many_to_many關系,因此UserMenu具有嵌套的many_to_many關系。

我想做的是根據用戶角色呈現菜單。 所以我有這個輔助模塊:

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_treetab只是一種方法,或者您可能會建議一種更好的方法來解決此問題? 謝謝。

由於具有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 %>

它將菜單的名稱與要渲染的文件的路徑連接起來,並且一切正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM