快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

rails入门级开发项目——树形分类(1)-创新互联

今天要做的是这么个东东,先上数据库:

成都创新互联公司网站建设公司,提供做网站、成都网站建设,网页设计,建网站,PHP网站建设等专业做网站服务;可快速的进行网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,是专业的做网站团队,希望更多企业前来合作!

rails入门级开发项目——树形分类(1)

是一个简单的树形结构,一个tree_id对应一个parent_id,相当于对应一个父节点,涉及到了自身的连接关系,其实还是挺复杂的数据库设计,起码当初这个设计是怎么也木有看懂~

想要达到的想法是动态的在节点上增删改,可以用鼠标各种拖动换parent那种。不过现在的本事只能做成静态的,现在的状态是点击某一节点的链接会显示自己,父亲,儿子,以及兄弟。

闲话少说,上代码:

数据库生成部分,很简单的两个属性,注意id:false这句话,这是ruby 1.9之后才支持的特性,其实等同于 :id => false ,也就是说没有在这个表中给规定rails默认的id,那怎么办?请看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后面跟复数,belongs_to后面放单数~~而且这两者同样的foreignkey都是parent_id,但是意思却是不一样的。前者是把自己作为主键,parent_id是别人的,后者相反,parent_id是自己的~这是我现在的理解。放了一个验证函数,保证在save之前执行,确保自己不能是自己的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这一个地方。注意@tree_provider.tree_provider和@tree_provider.tree_providers的区别,其实这样表示很没有区分啦,所以一个现在解决不了的问题来了,如何才能实现@tree_provider.parent 和@tree_provider.children?求各路大神帮助ORRRZparams[:id].to_i 这句话的目的是在其父亲的所有儿子中将自己排除掉获得所有兄弟,结果也是各种试出来的,因为发现params[:id]是一个字符串

def show
   @tree_provider = TreeProvider.find(params[:id])
   @children = []
   @tree_provider.tree_providers.each{|t|@children<

view就太简单啦,只是把@children和@brothers都显示出来而已,鉴于水平太低就不贴代码啦,运行结果是这样的:

rails入门级开发项目——树形分类(1)

上面是所有tree的list,下面是单独的一个节点的信息。

rails入门级开发项目——树形分类(1)

很无聊的东东,聊以自high啦~

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


网站栏目:rails入门级开发项目——树形分类(1)-创新互联
文章路径:http://6mz.cn/article/ioeod.html

其他资讯