`
emir
  • 浏览: 6589 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Rails是否可以这样解决这个辣手的问题?

阅读更多
目前开发的产品中有这样的一个需求,产品可以建立任意多的项目,每建立一个项目就要根据项目名称建立三个数据库表来保存该项目的人员,项目详细记录,还有项目中的分类。那么如果按照ROR的约定我就要创建很多很多的model与数据库相应的表建立关系,我的控制器还要识别出来关联的是那个model.
我在想是否可以动态创建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来的方便。

请大家指教一二
分享到:
评论
6 楼 emir 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


5 楼 cookoo 2006-10-25  
这不是关系数据库的设计风格,而是Excel的风格。。。
4 楼 Gene 2006-10-25  
开个玩笑: 这个问题真的好 '辣' 手. 应该是棘手吧, 呵呵
3 楼 alang 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无关。
2 楼 Godlikeme 2006-10-25  
语言所描述的内容是一样的,只是形式不同。
1 楼 Gene 2006-10-25  
为啥每建立一个项目就要生产三个新的表? 这些表上加一个collumn区分不同的项目不行吗?

相关推荐

    rails和mysql数据库连接中出现的问题以及解决办法

    通常,较新的Rails版本支持较新的MySQL版本,但旧版本的Rails可能需要降级MySQL或升级Rails以解决问题。 总结来说,解决Rails与MySQL连接问题涉及检查配置文件、安装和更新依赖、确保系统库完整、确认服务状态和...

    Rails recipes

    Rails Recipes是一本针对Ruby on Rails框架的实用书籍,它收集了一系列高效解决问题的技巧和方法,也被称为“Rails开发者的宝典”。作者们通过分享自己的经验和见解,为Rails程序员提供了一本既有实际操作指导又有...

    rails飞信 gem plugin api 插件的问题解决方案

    标题中的“rails飞信 gem plugin api 插件的问题解决方案”涉及到的是在Ruby on Rails框架下,使用特定的gem(一种Ruby的库或插件)来集成飞信API时遇到的问题及解决方法。飞信是中国移动推出的一种即时通讯服务,...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    Rails的中文乱码问题

    解决Rails的中文乱码问题,需要对整个应用的编码环境进行统一和检查,确保每个环节都支持和识别UTF-8编码。同时,学习和理解Ruby的字符串处理机制以及Rails的编码设置是至关重要的。通过调试和测试,可以逐步定位并...

    Rails

    描述中提到的博文链接指向了一个ITEYE博客文章,尽管具体内容未提供,但通常这样的博客可能会包含Rails的使用技巧、最佳实践、新版本更新或者特定问题的解决方案。 标签 "源码" 暗示了可能涉及Rails的源代码分析或...

    rails4.0.0

    为了解决安全问题,Rails 4引入了Strong Parameters,强制开发者明确指定哪些参数可以被控制器的action使用。这有助于防止意外的未授权数据注入。 7. ** turbolinks** Rails 4默认包含了Turbolinks,这是一个...

    中文版rails教程

    总的来说,Ruby on Rails是一个强大的开发工具,它简化了Web应用的构建过程,让开发者可以更专注于创新和解决问题,而不是琐碎的配置和代码复写。通过深入学习和实践,你可以提升自己的技术水平,为未来的事业发展...

    component base rails applications

    - 如何进行模块化拆分,以使得每个模块都是独立和专注于解决一个特定问题的。 - 如何在保持组件独立性的同时,确保它们能够协同工作,共同构成一个完整的应用。 7. 历史和演变: - 描述了组件化思想的历史,并...

    Advanced Rails

    10. **Rails社区与工具**:熟悉Rails社区的资源,如Stack Overflow、GitHub上的开源项目,以及RailsGuides和Rails API文档,这些都能帮助开发者解决问题和提升技能。 "Advanced Rails"这本书是进一步提升Rails技能...

    ruby on rails与MySql的环境配置——支持rails 2.3.5以上版本

    在命令行界面(CMD)输入`gem install rails`,这个过程可能因为网络问题导致失败,提示找不到rails。此时,你可以使用HTTP代理服务器来完成安装,例如:`gem install rails -p http://218.56.64.2:80`。如果提示...

    rails cookbook

    这本书通过一系列详细且实用的代码示例,为读者提供了快速解决问题的方案。 描述中提到,虽然书籍是英文版,但代码清晰,对于理解没有障碍。这表明书中包含了大量的实际代码片段,可以帮助读者更好地理解和应用...

    Ruby on Rails实例开发

    它可能涵盖了技术选择的原因、遇到的问题及解决方案、性能优化、用户体验设计等方面,是整个开发工作的总结和理论支持。 总的来说,Ruby on Rails实例开发涉及到一系列技术,包括Ruby编程、Rails框架的使用、SQLite...

    配置rails环境

    4. **解决Gem依赖问题**:在上述描述中遇到的问题是缺少`sqlite3`库,这是Rails与SQLite3数据库交互所必需的。在Windows环境下,安装SQLite3的Ruby绑定时可能会遇到编译错误。解决方法是下载预先编译好的版本,或者...

    Mac上rails环境的搭建

    如果遇到这个问题,可以尝试以下解决方案: ```bash sudo ln -s /usr/local/mysql-5.6.26-osx10.8-x86_64/bin/mysql /usr/bin/mysql ``` 如果问题仍未解决,可以使用`install_name_tool`命令来更改动态链接库...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    3. **社区活跃**:Rails拥有庞大的开发者社区,提供了丰富的插件和教程资源,遇到问题时可以迅速获得帮助。 4. **安全性**:Rails内置了一系列安全措施,比如防止SQL注入、XSS攻击等,有助于保护应用免受常见威胁。 ...

    Ruby-APITaster一种快速而简单的方法来可视化测试你的Rails应用API

    它显示了API响应的状态码、头部信息以及返回的数据,这有助于快速定位和解决问题。通过这种方式,开发者可以实时查看API的响应,无需编写额外的测试脚本或依赖其他复杂的测试工具。 在实际应用中,API Taster可以...

    rails2.3.2gem本地安装包及使用说明

    Rails 2.3.2 是一个古老的 Ruby on Rails 框架版本,它在 ...总之,通过本地安装 Gem 可以解决网络问题,但应留意旧版本的安全风险。对于 Rails 开发,保持框架和依赖的更新至关重要,以便利用最新的特性和安全修复。

    Rails 4 Test Prescriptions

    2. **实战案例丰富**:书中包含大量真实世界中的案例研究,使读者能够在实践中学习如何解决实际问题,并将所学知识运用到自己的项目当中。 3. **深度剖析RSpec**:作为RSpec领域内的一位权威专家,Noel Rappin在书...

Global site tag (gtag.js) - Google Analytics