浏览 4937 次
锁定老帖子 主题:Rails是否可以这样解决这个辣手的问题?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-25
我在想是否可以动态创建model 动态让controoler识别用户要访问哪个项目 根据项目来指定相关的表的关联呢? 可能说的不够清楚 我来举一下实例 数据库表设计 项目表[Items]: id name 记录 2 Ruby文档管理系统 程序需要根据 建立的项目记录自动生成三个表 ------------------------------------------------ 项目用户表[2_users] id name 记录 1 emir ------------------------------------------------ 项目分类表[2_classes] id name 记录 1 RubyIO处理 2 Ruby语法 ------------------------------------------------- 项目详细记录表[2_records] id title dep 2_class_id 2_users_id 1 题目1 题目1描述 1 1 2 题目2 题目2描述 2 1 ------------------------------------------------- 用户在登录时就要选择进入哪个项目,选择后将可以查看该项目下的所有的记录 并可以进行增删改 以我的理解 按照ror的约定 每建立一个项目我就要根据该项目id生成数据库表 动态生成model\controoler ,项目越多生成的物理文件越多 我目前所做的是 每建立一个项目 生成三个表 然后再动态生成三个model文件,在controller内根据用户选择的访问的项目id来决定指定关联哪个项目的model,思路是这样 但还没有完全实现 因为我刚刚接触ROR不久。 我想问大家是否有更好的办法来解决这个需求,不然以我这样的方式会变得很麻烦 还不如使用java or asp.net来的方便。 请大家指教一二 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-10-25
为啥每建立一个项目就要生产三个新的表? 这些表上加一个collumn区分不同的项目不行吗?
|
|
返回顶楼 | |
发表时间:2006-10-25
语言所描述的内容是一样的,只是形式不同。
|
|
返回顶楼 | |
发表时间:2006-10-25
不需要你这样搞。
数据库的设计 产品表 ===== 产品ID,产品名称, 项目表 ===== 项目ID,项目名称,产品ID 项目详细信息 项目ID,项目信息1,项目信息2,..... 人员表 ===== 人员ID,人员名称 项目--人员表 项目ID,人员ID 产品:has_many 项目 项目:has_and_belongs_to 人员 项目:belongs_to 产品 人员:has_and_belongs_to 项目 让大家见笑了。初步想到的就这些。这是数据库设计的问题,与Java/asp.net无关。 |
|
返回顶楼 | |
发表时间:2006-10-25
开个玩笑: 这个问题真的好 '辣' 手. 应该是棘手吧, 呵呵
|
|
返回顶楼 | |
发表时间:2006-10-25
这不是关系数据库的设计风格,而是Excel的风格。。。
|
|
返回顶楼 | |
发表时间:2006-10-26
cookoo 写道 这不是关系数据库的设计风格,而是Excel的风格。。。 每一个公司有每一个公司的考虑就有一些情况制约你不能使用使用外键来联系多个表之间的关系。 而我所要问的即是如果动态创建ActiveRecord ,或者Controller。 在这里要感谢一位gtalk上认识的朋友,他曾经遇到相同的问题。 这里给出如何创建ActiveRecord module Dynamic class << self def klass(table_name) tname = class_name_from_table(table_name) #see if it has already been defined const_missing(tname) rescue NameError define_klass(table_name) end def objeck(table_name) klass(table_name).new end private def class_name_from_table(table_name) Inflector.camelize(table_name) end def define_klass(table_name) tname = class_name_from_table(table_name) class_def = <<-end_eval class #{tname} < ActiveRecord::Base set_table_name('#{table_name}') end end_eval eval(class_def, TOPLEVEL_BINDING) const_get(tname) end end end 使用样例: class ProjectController < ApplicationController include Dynamic def index @projects = Dynamic.klass("projects1").find :all #Project.set_table("projects1") #@projects = Project.find :all end |
|
返回顶楼 | |