我有班级人员和班级科目。目前他们根本没有联系。作为用户,只能从列表中选择主题并检查它们。 现在我想允许用户分配给主题,因此用户类需要一个可以存储其主题的列表。 ......以及将主题映射到人的表格。(m到n)
我对Ruby on Rails没有太多经验,我害怕在尝试这样做时破坏我的应用程序。
到目前为止,我发现有命令可以做到这一点(例如$ rails generate migration AddSubjectsToPersons
),但是我无法确切地知道它们到底做了什么,例如它触及我的模型或控制器类。
在是的情况下 - 是否有我之前写过的东西?如果没有 - 是否足以在我的模型中添加一个名为课程的字段(列表),并且会自动检测到与数据库的连接?
答案 0 :(得分:1)
脚本rails generate migration
创建一个迁移文件,其中包含使用rake db:migrate
运行数据库时操作数据库的所有命令。
例如,您创建一个迁移,将外键添加到表中并执行迁移。然后,您转到模型并在两个模型(active_record
,belongs_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>