2

我有一个 Pinterest Ruby 爬虫(不在 Rails 中),我将数据写入 JSON 文件。我为 Pins 创建了一个 ActiveRecord。我还创建了一个将数据从文件加载到 mysql 的方法。但是我的 load_pins 方法不会将任何数据加载到数据库中,但它会为它们创建空行。我什至放了一个调试器并尝试手动将一些数据加载到我的引脚表中,例如

pin = Pin.first
pin.field_id = 1
pin.user_id = 1
pin.save!

它甚至返回 true,当我这样做时pin.user_id它返回 1 但在数据库中没有保存任何内容,或者如果我只是尝试打印 pin 它显示所有内容为空。

引脚型号:

require_relative '../database_configuration'

class Pin < ActiveRecord::Base 
  attr_accessor :field_id, :user_id, :board_id, :img_url, :is_repin, :is_video, :source, :link, :description, :user_name
  attr_accessible :field_id, :user_id, :board_id, :img_url, :is_repin, :is_video, :source, :link, :description, :user_name

  def to_json
    {
      field_id: field_id,
      user_id: user_id,
      user_name: user_name,
      board_id: board_id,
      img_url: img_url,
      is_repin: is_repin,
      is_video: is_video,
      source: source,
      link: link,
      description: description,
    }
  end
end 

我的 Load_pins 方法

def load_pins
  pins = JSON.parse(File.read('pins.json'))
  Pin.create!(pins)
end

mysql

mysql> select * from pins;
+----+----------+---------+----------+---------+----------+----------+--------+------+-------------+-----------+
| id | field_id | user_id | board_id | img_url | is_repin | is_video | source | link | description | user_name |
+----+----------+---------+----------+---------+----------+----------+--------+------+-------------+-----------+
|  1 |     NULL |    NULL |     NULL | NULL    |        0 |        0 | NULL   | NULL | NULL        | NULL      |
|  2 |     NULL |    NULL |     NULL | NULL    |        0 |        0 | NULL   | NULL | NULL        | NULL      |

知道为什么会这样吗?在 Rails 之外使用 ActiveRecord 时我错过了什么吗?

4

1 回答 1

2

从表attr_accessor中的所有字段中删除pins

如果添加验证,您将看到没有设置任何 AR 字段,因为attr_accessor它覆盖了 AR 使用的“字段”。AR 不查看由 定义的实例变量中的值attr_accessor,例如@field_id.

我在上面说“字段”,因为 AR 实际上将所有字段值存储在attributes哈希中。然后,AR 定义了从该哈希中读取/写入的方法。因此,field_id可以作为方法访问attributes[:field_id],也可以作为方法访问field_id

于 2012-10-15T07:44:07.277 回答