rails遵循其命名约定提供各种好处。因此,在我刚刚创建的Expect模型中,我还获得了所有类似命名的视图和控制器,并且在迁移中
class CreateExpects < ActiveRecord::Migration
def self.up
create_table :expects do |t|
我注意到它会自动在此迁移中创建表“expect”,并且我假设从中获得了一些好处。但是,如果我想在此迁移中创建多个表
,该怎么办?例如,我正在构建一个非常简单的应用程序,向学生提出两个问题,
The students will be asked two questions on a form
"Which courses do you think students will likely fail?" (Check all that apply)
Math, English, French, Science
"Which courses do you think students will likely pass?" (check all that apply)
Math, English, French, Science
但是人们构建数据库的建议是创建几个表,并且由于这些表也有不同的名称,我如何处理我不再符合rails约定的事实
例如,如果在views / expected / new.html.erb(和_form)中的一个表单中询问这两个问题,我如何确保每个问题的数据都进入正确的表格?然后在我显示数据的其他页面中将它们全部拉出来?
答案 0 :(得分:1)
我不认为我完全明白你在问什么,但我认为我可以根据你的问题帮助你。这就是您的数据库设置应该是什么样的。
创建一个名为student的表。您可以使用generate model命令。
rails生成模型学生
转到您的迁移文件夹(db / migrate)并查找学生迁移文件。
在迁移文件中添加这些行。 请注意,您可以在学生和主题之间使用一些关联来设置数据库,但对于像这样的简单应用程序,我不会打扰。
b.boolean:firstanswer_math
t.boolean:firstanswer_english
t.boolean:firstanswer_french
t.boolean:firstanswer_science
t.boolean:secondanswer_math
t.boolean:secondanswer_english
t.boolean:secondanswer_french
t.boolean:secondanswer_science
在视图中,将复选框与每个问题的每个主题相关联。
第一个问题
&lt;%= form.check_box:firstanswer_math =&gt;
&lt;%= form.check_box:firstanswer_english =&gt;
...
当然,您需要在学生的Controller文件中使用适当的方法,但我会省略该步骤。
如果我已经充分回答了你的问题,请告诉我。
首次修改
没有这种灵活性。你必须按照这个顺序, object.attribute 。
不,你应该在没有它的情况下找到它。如果要将两个模型与两个不同的数据库表相关联,则需要has_many类型的关联。在我们的例子中,可以在一个模型和几个属性中轻松设置应用程序。所以有一张桌子就可以了。
我想我现在理解为什么你提出“firstanswer_math.student”。您是否正在尝试将firstanswer_math设置为true或其他内容的学生?如果你想这样做,你可以对学生使用find
方法。例如,
@students = Student.find_all_by_firstanswer_math( true )
我不会说我是Ruby on Rails专家,但我认为大多数Ruby on Rails开发人员可能会为我的问题实施我的实现。