将一个对象列表(由我编写的类)添加到现有类中

时间:2012-12-11 15:17:40

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 scaffolding

我有班级人员和班级科目。目前他们根本没有联系。作为用户,只能从列表中选择主题并检查它们。 现在我想允许用户分配给主题,因此用户类需要一个可以存储其主题的列表。 ......以及将主题映射到人的表格。(m到n)

我对Ruby on Rails没有太多经验,我害怕在尝试这样做时破坏我的应用程序。 到目前为止,我发现有命令可以做到这一点(例如$ rails generate migration AddSubjectsToPersons),但是我无法确切地知道它们到底做了什么,例如它触及我的模型或控制器类。 在是的情况下 - 是否有我之前写过的东西?如果没有 - 是否足以在我的模型中添加一个名为课程的字段(列表),并且会自动检测到与数据库的连接?

2 个答案:

答案 0 :(得分:1)

脚本rails generate migration创建一个迁移文件,其中包含使用rake db:migrate运行数据库时操作数据库的所有命令。
例如,您创建一个迁移,将外键添加到表中并执行迁移。然后,您转到模型并在两个模型(active_recordbelongs_to)之间添加正确的has_many引用。执行此步骤后,如果您检查控制台rails console,并执行类似

的操作
user = User.find(1)
user.subjects

查询应该完美无瑕 基本上,迁移生成器脚本只是操纵数据库。必须通过更改模型上的代码来进行所有其他更改。

答案 1 :(得分:0)

我使用命令rails generate migration CreatePersonsSubjects生成了一个迁移文件。名称按字母顺序排列(约定)。 此命令的结果是一个框架,可以在其中输入代码以更改数据库表。 这是“向上”部分:

create_table :persons_subjects, :id => false do |t|
      t.integer :person_id, :null => false
      t.integer :subject_id, :null => false
    end 

在“向下”部分,可以恢复这些操作:

   drop_table :persons_subjects

最后,我在person类中添加了一个字段(顺便说一下,只添加到person类。但是也可以/应该在主题上添加类似的行)。这个名字也是惯例。

  has_and_belongs_to_many :subjects

在视图中可以使用这样的主题:

<div>Courses taken:
  <ul>
    <% @person.subjects.each do |subject| %>
      <li><%= link_to subject.name, subject, :class => 'action' %></li>
    <% end %>
  </ul>
</div>