2

データをJSONファイルに書き込むPinterest Rubyクローラー(Railsではありません)があります。ピンの ActiveRecord を作成しました。ファイルから mysql にデータをロードするメソッドも作成しました。しかし、私の load_pins メソッドはデータをデータベースにロードしませんが、空の行を作成します。デバッガーを入れて、ピンテーブルにデータを手動でロードしようとしたので、たとえば

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

そして、それはtrueを返し、私がそうpin.user_idすると1を返しますが、データベースには何も保存されません。または、ピンを印刷しようとすると、すべてが空になります。

ピン モデル:

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ます。

attr_accessor検証を追加すると、AR が使用する「フィールド」をオーバーライドしているため、AR フィールドが設定されていないことがわかります。attr_accessorAR は、 によって定義されたインスタンス変数 ( など)の値を調べません@field_id

上で「フィールド」と言ったのは、AR が実際にはすべてのフィールド値をattributesハッシュに格納するためです。次に、AR はそのハッシュから読み書きするメソッドを定義します。そのため、メソッドとして、またメソッドとしてもfield_idアクセスできます。attributes[:field_id]field_id

于 2012-10-15T07:44:07.277 に答える