rails入門級(jí)開(kāi)發(fā)項(xiàng)目——樹(shù)形分類(1)

今天要做的是這么個(gè)東東,先上數(shù)據(jù)庫(kù):

成都創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、臨潭網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為臨潭等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

rails入門級(jí)開(kāi)發(fā)項(xiàng)目——樹(shù)形分類(1)

是一個(gè)簡(jiǎn)單的樹(shù)形結(jié)構(gòu),一個(gè)tree_id對(duì)應(yīng)一個(gè)parent_id,相當(dāng)于對(duì)應(yīng)一個(gè)父節(jié)點(diǎn),涉及到了自身的連接關(guān)系,其實(shí)還是挺復(fù)雜的數(shù)據(jù)庫(kù)設(shè)計(jì),起碼當(dāng)初這個(gè)設(shè)計(jì)是怎么也木有看懂~

想要達(dá)到的想法是動(dòng)態(tài)的在節(jié)點(diǎn)上增刪改,可以用鼠標(biāo)各種拖動(dòng)換parent那種。不過(guò)現(xiàn)在的本事只能做成靜態(tài)的,現(xiàn)在的狀態(tài)是點(diǎn)擊某一節(jié)點(diǎn)的鏈接會(huì)顯示自己,父親,兒子,以及兄弟。

閑話少說(shuō),上代碼:

數(shù)據(jù)庫(kù)生成部分,很簡(jiǎn)單的兩個(gè)屬性,注意id:false這句話,這是ruby 1.9之后才支持的特性,其實(shí)等同于 :id => false ,也就是說(shuō)沒(méi)有在這個(gè)表中給規(guī)定rails默認(rèn)的id,那怎么辦?請(qǐng)看model部分~

class CreateTreeProviders < ActiveRecord::Migration
  def change
    create_table :tree_providers, id: false do |t|
      t.integer :tree_id
      t.integer :parent_id
      t.timestamps
    end
  end
end

model部分在這里~注意這里面的has_many后面跟復(fù)數(shù),belongs_to后面放單數(shù)~~而且這兩者同樣的foreignkey都是parent_id,但是意思卻是不一樣的。前者是把自己作為主鍵,parent_id是別人的,后者相反,parent_id是自己的~這是我現(xiàn)在的理解。放了一個(gè)驗(yàn)證函數(shù),保證在save之前執(zhí)行,確保自己不能是自己的parent。

class TreeProvider < ActiveRecord::Base
  attr_accessible :parent_id, :tree_id
  has_many :tree_providers  , foreign_key: :parent_id
  belongs_to :tree_provider , foreign_key: :parent_id
  set_primary_key :tree_id
  before_save :judge_self
  def judge_self
    if parent_id == tree_id
      false
    end
  end
end

Controller部分~~只更改了show這一個(gè)地方。注意@tree_provider.tree_provider和@tree_provider.tree_providers的區(qū)別,其實(shí)這樣表示很沒(méi)有區(qū)分啦,所以一個(gè)現(xiàn)在解決不了的問(wèn)題來(lái)了,如何才能實(shí)現(xiàn)@tree_provider.parent 和@tree_provider.children?求各路大神幫助ORRRZparams[:id].to_i 這句話的目的是在其父親的所有兒子中將自己排除掉獲得所有兄弟,結(jié)果也是各種試出來(lái)的,因?yàn)榘l(fā)現(xiàn)params[:id]是一個(gè)字符串

def show
   @tree_provider = TreeProvider.find(params[:id])
   @children = []
   @tree_provider.tree_providers.each{|t|@children<<t.tree_id }
   @parent = @tree_provider.tree_provider
   @brothers = []
   @parent.tree_providers.each{|t|@brothers<<t.tree_id }
   @brothers.delete(params[:id].to_i)
   respond_to do |format|
     format.html # show.html.erb
     format.json { render json: @tree_provider }
   end
 end

view就太簡(jiǎn)單啦,只是把@children和@brothers都顯示出來(lái)而已,鑒于水平太低就不貼代碼啦,運(yùn)行結(jié)果是這樣的:

rails入門級(jí)開(kāi)發(fā)項(xiàng)目——樹(shù)形分類(1)

上面是所有tree的list,下面是單獨(dú)的一個(gè)節(jié)點(diǎn)的信息。

rails入門級(jí)開(kāi)發(fā)項(xiàng)目——樹(shù)形分類(1)

很無(wú)聊的東東,聊以自high啦~

文章名稱:rails入門級(jí)開(kāi)發(fā)項(xiàng)目——樹(shù)形分類(1)
標(biāo)題網(wǎng)址:http://bm7419.com/article48/pssjep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、品牌網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、Google、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)