gpt4 book ai didi

ruby-on-rails - 在 Rails 中一次迁移中的多个表 - 如何命名

转载 作者:行者123 更新时间:2023-12-03 18:00:11 24 4
gpt4 key购买 nike

据我了解,如果您遵循其命名约定,rails 会提供各种好处。因此,在我刚刚创建的 Expect 模型中,我还获得了所有名称相似的 View 和 Controller ,并且在迁移中

class CreateExpects < ActiveRecord::Migration
def self.up
create_table :expects do |t|

我注意到它会自动在此迁移中创建“预期”表,并且我假设从中会产生一些好处。但是,如果我想在此迁移中创建多个表怎么办

例如,我正在构建一个非常简单的应用程序,向学生提出两个问题,
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/expects/new.html.erb(和_form)中的一种形式提出这两个问题,我如何确保数据进入每个问题的正确表格?然后在我显示数据的其他页面中将其全部拉出?

最佳答案

我不认为我完全理解您的要求,但我认为我可以根据您的问题为您提供帮助。这就是您的数据库设置应该是什么样子。

  • 创建一个名为 student 的表。您可以使用生成模型命令。

    rails 生成模型学生
  • 进入您的迁移文件夹 (db/migrate) 并查找学生迁移文件。
  • 在迁移文件中添加这些行。
    请注意,您可以使用学生和科目之间的某种关联来设置数据库,但对于像这样的简单应用程序,我不会打扰。

    t.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
  • 在 View 中,将复选框与每个问题的每个主题相关联。

    第一个问题
    <%= form.check_box :firstanswer_math =>
    <%= form.check_box :firstanswer_english =>
    ...
  • 当然,您需要在 Controller 文件中为学生提供适当的方法,但我将省略该步骤。

  • 让我知道我是否充分回答了您的问题。

    第一次编辑
  • 我可以调用 student.firstanswer_math 但我不能调用 firstanswer_math.student 你知道我如何设置迁移来创建这种可逆的方法调用灵 active 吗?

  • 没有这样的灵 active 。你必须按照这个顺序,object.attribute。
  • 我需要 has_many_through 吗?

  • 不,你应该找到没有它。当您想将两个模型与两个不同的数据库表关联时,您需要 has_many 类型的关联。在我们的例子中,应用程序可以轻松设置为一个模型和多个属性。因此,拥有一张 table 非常好。
  • 即使您可能认为它不适合这个简单的应用程序的目的,因为我正在学习,我想知道是否使用允许调用 student.firstanswer_math 和 firstanswer_math.student 的更复杂的结构可能会让我在以下方面更具灵 active 我处理并以不同方式呈现的数据。

  • 我想现在我明白你为什么提出“firstanswer_math.student”了。您是否要查找 firstanswer_math 设置为 true 的学生?如果你想这样做,你可以使用 find对学生的方法。例如,
    @students = Student.find_all_by_firstanswer_math( true )
  • 我还在学习rails,所以我真的只是在玩,但是如果你能为这个更复杂的设置推荐最好的结构(第一次推荐非常好),那么请做

  • 我不会说我是 Ruby on Rails 专家,但我认为大多数 Ruby on Rails 开发人员可能会选择我的实现来解决您的问题。

    关于ruby-on-rails - 在 Rails 中一次迁移中的多个表 - 如何命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351477/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com