【问题标题】:Add Rows to a SQL Table in Ruby on Rails在 Ruby on Rails 中向 SQL 表中添加行
【发布时间】:2016-10-06 01:15:02
【问题描述】:

如何在 Rails 中向表中添加数据?

到目前为止,我已经创建了一个从 API 提取数据的 Rails 应用程序。接下来,我已经运行了命令

rails generate model order

我有 /db/migrate/timestamp_create_orders.rb

class CreateOrders < ActiveRecord::Migration
  def change
    create_table :orders do |t|
      t.string :email, null: false
      t.string :order_date, null: false
      t.string :total_price, null: false
      t.string :order_number, null: false
      t.string :cust_name, null: false
      t.string :zip_code, null: false

      t.timestamps null: false
    end
  end
end

接下来,我认为我需要运行 db:migrate 来创建表。

我的问题是,如何将数据添加到此表中?我希望用户访问该应用程序,它会提取数据并将其存储在此表中。

我发现了相互矛盾的建议.. 我应该使用here的建议吗?

Order.create(:email=>'fake@fake.com',:order_data=>"... 

但其他建议似乎说不要这样做herehere。虽然他们都很老了

【问题讨论】:

  • 看过 Rails 文档了吗? guides.rubyonrails.org/…。 Model.create() 将创建并保存记录。 Model.new() 将创建它,您必须执行 var.save 才能保存到数据库。
  • 谢谢。所以这是最佳实践?我真的不明白为什么有些帖子说你不应该使用它。只是不将其用于种子数据?
  • 您是否要在应用程序正在使用时保存来自 api 的数据(这似乎是您的问题,其余部分已设置)?使用默认数据播种数据库与在使用应用程序时保存记录是两件不同的事情(至少对我而言)。我不会通过迁移将数据添加到数据库。它用于创建和修改表(数据库设置)。您的控制器、模型、api、种子等文件将根据您的目的/目标处理添加和删除数据。我阅读了上面的整个文档页面,它通过示例进行了解释并给出了上下文。
  • 对不起,在你的评论中回答你的问题,我认为这是正确的,他们说不要在迁移中使用 create() 方法,这是 Rails 操纵数据库结构的方式,但它是公平的在您的应用代码中。

标签: ruby-on-rails


【解决方案1】:

您不会在迁移中创建数据库条目,您通常会创建架构或在迁移文件中的 schema 中指定更改。您使用seeds 在数据库中创建种子数据。

要通过 Rails 在数据库中创建新数据,您可以使用 createnew 方法,但是当您使用 new 方法时,您需要 save 链接中其他帖子中提到的数据。

【讨论】:

    【解决方案2】:

    在创建或迁移新的数据库表时,不会自动添加表row。您需要手动添加它们。填充新创建的数据库表的一种方法是使用位于应用程序db 文件夹中的seeds.rb 文件。您可以将Faker gem 添加到您的应用程序中,以创建假表属性元素。一个使用faker的例子:

    (1..3).each do # it'll create  3 new order
       Order.create(email: Faker::Internet.email, order_date: Faker::Date.between(2.days.ago, Date.today))
    end
    

    然后在你的项目文件夹控制台中运行rake db:seed

    如果您在 order.rb 文件中有一些验证,那么您可以创建该 newnew 实例,然后将其保存为:

    order = Order.new(....)
    
    order.save(validate: false)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多