我要建设我的第一个红宝石在轨道上应用程序(及第一任何东西超越xhtml和css),而我正在寻找一些有用的反馈意见上我的模型的结构。

我已经包括一个模型,以帮助的视觉的应用程序。

唯一的型号我相信我需要迄今为止是:
1.一个 电影 模型 (作为主要的模型,命名为电影这样的网址将会看起来像"sitename.com/movies/1-Willy-Wonka")
2.一个 用户 模型

除了那些,我不知道该怎么做的其他人;像'拍摄地点','行动者',以及最重要的是,attributes like'威利旺卡"和"约翰尼*德普'.

我应该让所有的这些模型,甚至属性?如果是这样,它是可能的,并建议,为让人们建立模型的属性?

我试试看到的应用程序,因为创建的数据的形式和存储在数据库,并与pov我不能决定如何连接性(字 <=>演员)节(行动者,拍摄地点、艺术品等)。 内部电影的清单;同时允许自己的属性,可链接相关的属性/电影/甚至部分:点击'史蒂芬speilberg'将会带给你一页的电影,他的行为、薄膜他的指示,产生的,编写,等等。

想法?

有帮助吗?

解决方案

我会推荐你的数据模型清楚的第一次。然后你可以启动一个轨道模型每个数据库表。这是不是总是这种情况,但它是一个合理的地方开始。

让我们重点关注电影和行动者:

一些假设:

  • 电影可以有许多对多关系到其他实体
  • 你想要保存的文字信息的一部分之间的关系是一个演员和一个电影

你可能会模型之间的关系这样的:

# movies.rb
class Movie < ActiveRecord::Base
  has_many :roles
  has_many :actors, :through => :roles
end

# actor.rb
class Actor < ActiveRecord::Base
  has_many :roles
  has_many :movies, :through => :roles
end

通常情况下,你可以依靠轨道的魔法来处理加入模型,而不创建一个自己。在这种情况下,我们要存储的文字信息为属性的参加模式,因此,我们创建它明确。

# role.rb
class Role < ActiveRecord::Base
  belongs_to :movie
  belongs_to :actor
end

其他提示

开始配车型的电影,演员,FilmLocation和字符。电影和演员有很多一对多的关系(电影有很多演员,演员曾在多部电影)。 FileLocation和电影也有不少一对多。字符(威利旺卡)和演员许多一对多以及

如果这是你的第一个东西只要Web开发那么我建议你先写一个简单的Web应用程序,只列出了电影,并允许添加,编辑和删除它们。只要存储标题,摘要以及电影海报/ DVD封面的可能的URL。然后在加入演员,并将它们与电影相关联的工作。

创建“IMDB状”网站是不是一个简单的项目。你将有很多复杂的关系不仅仅是关联与电影演员。演员在电影的角色。你可能想要得到甚至比这更抽象的,说一个人有工作在电影这将让你也跟踪的东西,如导演,制片人,键握持,铸造董事。

不仅要你在数据模型的工作,但你希望自己的网站包括什么在计划工作,什么样的顺序,你应该建立在这些功能(根据需要),并采取小步骤去那最后目标

进一步阐述。上面列出的机型的迁移可能是这样的:

class CreateMovies < ActiveRecord::Migration
  def self.up
    create_table 'movies' do |t|
      t.string  'title', :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table 'movies' 
  end
end

class CreateActors < ActiveRecord::Migration
  def self.up
    create_table 'actors' do |t|
      t.string  'first_name', 'last_name', :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table 'actors' 
  end
end

下面对应的movie_idactor_id字段在上述角色模型的belongs_to协会和是外键,允许角色表加入演员和电影。正如我已经提出了造型吧,character_name是这种关系的性质,因此是角色的属性。这是你的电话是否允许在character_name NULL。我是持怀疑态度的NULL,但在这种情况下,我已经允许它作为一个可以使论点,即在实践中你经常要存储的事实,演员是在给定的电影,但不知道或关心的字符名。

class CreateRoles < ActiveRecord::Migration
  def self.up
    create_table 'roles' do |t|
      t.integer 'movie_id', 'actor_id', :null => false
      t.string 'character_name'
      t.timestamps
    end
  end

  def self.down
    drop_table 'roles' 
  end
end

这可能是值得的数据库标准化阅读了: http://en.wikipedia.org/维基/ Database_normalization

在一般情况下,是的。我喜欢我的模式,以尽可能精细。这使得事情更加清楚的人谁不熟悉的应用程序,使得它更容易重用代码。

这是有帮助的编写复杂的应用程序之前 ActiveRecord关联的牢牢把握。确保你知道所有心脏协会和他们实际的SQL表方面产生的。有时,它看起来像魔术,而魔术不一定是好事。如果你知道什么是它背后的东西落在到位。

此外,不要害怕放弃一切,重新开始,而实验。这是红宝石,所以它不会需要很长时间,回到原来的位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top