簡體   English   中英

具有層次結構的Rails標簽類

[英]Rails tag class with hierarchy

我將要構建的功能是使用jquery-ui菜單小部件的標記菜單。 這將用於搜索目的。 我想讓它們全部成為Tag模型中的對象,但是在如何在模型中具有層次結構方面花了很多時間。

例如,擁有夜生活=>餐館=>海鮮,其中所有三個都是標簽模型對象,其中海鮮是餐館的一種,餐館是夜生活的一種。

jquery-ui菜單小部件的示例代碼是硬編碼的,但是顯然我想用.erb創建它,能夠在Tag模型中創建關聯,所以如果我要創建其他類型的餐廳,可以用這種方式,例如Steakhouse ,可以在模型內和標簽層次結構內正確關聯。

不確定確切如何執行此操作。

您不妨查看一下“ 祖先”寶石

要么

盡管您需要澄清引用的“標簽”菜單(我想它是http://jqueryui.com/menu/ ),但我可以解決以下問題:

創建具有樹結構的模型


系統

沒錯,JQuery需要進行硬編碼(因為它是客戶端)

挑戰在於將數據放入JQuery函數中。 為此,您需要從Rails渲染數據(從助手(如果是靜態的,或者從模型,如果是動態的),然后將它們附加到渲染的頁面)

db -> model -> helper -> view (JS)

我將為您提供一個使用模型動態填充數據的示例:


模型

假設您擁有Tag模型,則可以使用自我參照關聯來創建標簽的parents集合。 這些父母可以讓您定義菜單的最頂層,並細分到子級別:

#app/models/tag.rb
Class Tag < ActiveRecord::Base
    belongs_to :parent, class_name: "Tag"
    has_many :children, through: :parent, foreign_key: "parent_id"

    #Gives hierachy
    scope :parents, -> { where(parent_id: nil} ) 
end

這應該允許您加載:

@tag.parents.children

這未經測試,因此可能需要大量調整


幫手

助手將能夠執行以下操作:

#app/helpers/application_helper.rb
def menu_tags
    #This needs fixing to enable hierarchies
    gon.push ({
       tags: Tag.all
    })
end

布局

因為您正在調用Rails數據,所以我將使用一個名為GONgem來將標簽輸出為JS可讀變量:

#app/views/layouts/application.html.erb
<%= include_gon %> #-> makes gon.tags available to JS


#app/assets/javascripts/application.js
// can call gon.tags & use in JQuery

暫無
暫無

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

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