2010-07-11 130 views
0

我是rails新手,正在开发内部内容管理应用程序。我制作了一个原型,但觉得它很混乱,还有更好的方法。我需要以下内容:Rails:嵌套的资源内容应用程序管理结构

我目前的原型使用工作流程(http://github.com/geekq/workflow)插件来管理项目和主题的状态。我也研究了acts_as_tree和acts_as_list,但我不确定如何最好地组织事物。

========

项目(有标题,描述,期限,workflow_state)状态:未公布(如草案]发表(主题可以在检查进出,等),归档(已完成的状态)]

模块(是项目[充当基]的子可以是许多;具有标题,描述,内容)

科(是模块的子[充当组];可以很多;可选;具有标题,描述, 内容)

主题(是小节的小孩;可以很多;可订购; (标题,说明,内容,工作流程状态,owner_id,订单)[状态:新,checked_out,pending_review,review_required,已完成]

进程(是主题的子节点;可以是多个;可选;具有标题,描述,内容)

资源(是过程的孩子,可以有很多,可选的;文件;已称号,resource_link)

-

(但是也有一些相关的项目还设有2个对象;引进和基本面,每个项目只有一个)

介绍(是项目的孩子;只有一个;具有:标题,描述,内容,workflow_state)[状态:同一主题]

基本原理(是项目的子项;只有一个;具有:标题,描述,内容,workflow_state)[状态:同一主题]

NB。我知道这些单词中的一些是保留的,并且将需要别名。

========

我希望能使用类似URL结构:

/项目/:PROJECT_ID /模块/:是模块/节/:SECTION_ID /主题/: topic_id /进程/:PROCESS_ID /资源/:RESOURCE_ID

或(如果省略部分)

/项目/:PROJECT_ID /模块/:模块id /主题/:topic_id /进程/:PROCESS_ID /资源/: resource_id

========

任何反应非常感谢。

更新:Rails 2.3.8

回答

1

你没有说你正在使用哪个版本的Rails。我为此目的假设版本2。在你config/routes.rb您可以设置这样的层次关系:

ActionController::Routing::Routes.draw do |map| 
    map.resources :projects do |projects| 
    projects.resources :modules do |modules| 
     modules.resources :topics do |topics| 
     topics.resources :processes do |processes| 
      processes.resources :resources 
     end 
     end 
    end 
    end 
end 

Rails的3路由器有一个类似的功能。

UPDATE:解决以下

的关联规则在评论其他问题该应用程序有所反映上面的路由层次。考虑它们的一种方法是查看您在问题中提出的资源URL。沿着URL从左到右阅读给你has_many的关系。从右向左阅读给你belongs_to的关系。例如:

class Project < ActiveRecord::Base 
    has_many :modules 
end 

class Module < ActiveRecord::Base 
    belongs_to :project 
    has_many :topics 
end 

class Topic < ActiveRecord::Base 
    belongs_to :module 
    has_many :processes 
end 

的,您可以访问孩子喜欢:

@project.modules 
@module.topics 
@topic.processes 

可选部分的问题需要你去思考这两个有关路由和架构代表和协会。第一个是最简单的。第二个是你需要小心的事情,以免太多的建模过度。路由规则可以修改如下:

ActionController::Routing::Routes.draw do |map| 
    map.resources :projects do |projects| 
    projects.resources :modules do |modules| 
     modules.resources :sections do |sections| 
     sections.resources :topics do |topics| 
      topics.resources :processes do |processes| 
      processes.resources :resources 
      end 
     end 
     end 
     modules.resources :topics do |topics| 
     topics.resources :processes do |processes| 
      processes.resources :resources 
     end 
     end 
    end 
    end 
end 
+0

我一直在使用该设置,但它似乎混乱,它会是很好,如果有更好的方法。它使变量和路径很烦人。 – Blake 2010-07-11 14:02:53

+0

不确定你的意思是烦人或凌乱。上述规则满足您要求的路线。你能否举一个你不喜欢的样子,你想要什么呢? – bjg 2010-07-11 14:31:23

+0

我打算有两个主要观点。查看项目(显示所有子项的轮廓为主题级别的树)和查看主题(显示流程和资源)。其余的只是编辑表单等。这意味着我在部分内部使用了许多分支,并且不得不保持传递变量。 – Blake 2010-07-12 03:08:01