0

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

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

4

2 回答 2

1

该脚本rails generate migration会创建一个迁移文件,其中包含当您使用rake db:migrate.
例如,您创建一个将外键添加到表的迁移并执行迁移。然后,您转到您的模型并active_record在两个模型之间放置正确的引用 ( belongs_to, has_many)。完成这些步骤后,如果您检查您的控制台rails console,并执行类似的操作

user = User.find(1)
user.subjects

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

于 2012-12-11T15:23:59.507 回答
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>
于 2012-12-12T00:26:09.633 回答