[英]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數據,所以我將使用一個名為GON的gem來將標簽輸出為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.