シード.rb のほとんどのエントリは、次のように単純です。
User.create!(
name: "Peter"
admin: false;
# etc.
)
「保護された属性を一括割り当てできません」というエラーが表示された場合は、モデルに小さな変更を加えます。この場合は user.rb です。
attr_accessible: name, admin
ここまでは順調ですね。しかし、別のエンジンをアプリに追加する rails gem によって生成されたテーブルにエントリをシードするにはどうすればよいでしょうか? たとえば、フォア。そして、私は他にもいると確信しています。
これらのエントリをseeds.rbファイルに追加しました:
Forem::Category.create!(
name: "cat1"
)
Forem::Forum.create!(
title: "forum1",
description: "forum1 description",
category_id: 1
)
Forem::Topic.create!(
forum_id: 1,
user_id: 1,
subject: 'topic1',
locked: false,
pinned: false,
hidden: false,
)
カテゴリとフォーラムは生成されますが、トピックはありません:
Can't mass-assign protected attributes: forum_id, user_id, locked, pinned, hidden
topic.rb モデルがあれば、何をすべきかがわかります。しかし、私はそれを持っていません。Forem はエンジンであり、モデル topic.rb の一部の属性を表示する方法がわかりません。
application.rb の次の行を知っています。
config.active_record.whitelist_attributes = true
大量割り当てに対する保護を有効にします。これを無効にすると、大きなセキュリティ ホールが残るため、オプションではありません。とにかく無効にすると、トピックテーブルにシードできませんでした。
備品も使ってみました。これをseeds.rbファイルに追加しました:
require 'active_record/fixtures'
Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "topics.yml")
テスト/topics.yml:
one:
id: 1
forum_id: 1
user_id: 1
subject: "topic1"
created_at: 2012-05-19 19:54:19
updated_at: 2012-05-19 19:54:20
locked: false
pinned: false
hidden: false
last_post_at: 2012-05-19 19:54:21
state: "open"
views_count: 3
私が得るエラーは -初期化されていない定数フィクスチャです
私の Seeds.rb とフィクスチャの何が問題になっていますか? または、移行を使用する必要がありますか?