我有一个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它显示为空的一切。
Pin Model:
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时我是否遗漏了什么?
答案 0 :(得分:2)
从attr_accessor
表格中删除pins
所有字段。
如果添加验证,您将看到没有设置任何AR字段,因为attr_accessor
会覆盖AR使用的“字段”。 AR不会查看attr_accessor
定义的实例变量中的值,例如@field_id
。
我说上面的“字段”,因为AR实际上将所有字段值存储在attributes
哈希中。
然后,AR定义从该散列读取/写入的方法。因此,field_id
可以attributes[:field_id]
访问,也可以field_id
方式访问。