我正在使用PG构建一个Rails项目,并尝试使用ResourceTopic表将我的主题和资源链接在一起(因此我可以为一个资源分配多个标记)。我也是我的智慧结束!它将保存topic_id,然后拒绝保存resource_id。
我在db:seeds文件的底部有这一行:
<p>Multi-select Drag</p>
<p>
<kbd>Click</kbd> to select individual items<br />
<kbd>Ctrl + Click</kbd> to select multiple items
</p>
<br />
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
<ul>
<li>Four</li>
<li>Five</li>
<li>Six</li>
</ul>
我的模特:
ResourceTopic.create({topic: Topic.find(1), resource: Resource.find(1)})
以下是有问题的迁移:
class Resource < ActiveRecord::Base
attr_accessor :resource_id
belongs_to :user
has_many :resource_topics
has_many :topics, :through => :resource_topics
end
class Topic < ActiveRecord::Base
has_many :resource_topics
has_many :resources, :through => :resource_topics
end
class ResourceTopic < ActiveRecord::Base
belongs_to :topic
belongs_to :resource
end
我尝试过的事情:
文字错误(第66行是我在文件顶部复制的内容):
class CreateResourceTopics < ActiveRecord::Migration
def change
create_table :resource_topics do |t|
t.belongs_to :resource, index:true, foreign_key: true
t.belongs_to :topic, index:true, foreign_key: true
t.timestamps null: false
end
end
end
答案 0 :(得分:0)
您的resource_topics
表格没有所需的resource_id
列,以便此关联有效。
您的迁移文件不一定代表数据库的实际状态。您尚未运行迁移,或者您运行的早期版本的迁移未引入resource_id
列,然后修改了迁移文件而未重新运行它。
答案 1 :(得分:0)
DB:RESET - 从架构中读取。
DB:ROLLBACK - 从最新的迁移中读取。在这种情况下,即使在迁移之后,使用db:reset也意味着我在其他文件中修复的错误仍然存在。
答案 2 :(得分:0)
我知道这有点旧,但在你的问题中,你说它会
&#34;拒绝保存resource_id&#34;
但您已将:resource_id
声明为attr_accessor
,这意味着它没有db列,并且不会持久保存到数据库。请查看here以获得澄清。当他说
&#34;如果您声明一个attr_accessor,那么您可以将其用作虚拟属性,这基本上是模型中不会持久保存到数据库的属性。&#34;
但是,我不清楚你如何使用:resource_id
。我只是遇到了同样的错误,而不是试图将值保存到数据库,而只是尝试为属性赋值。如果您的解决方案与我提供的解决方案不同,我很想知道它是什么,如果它是我的错误的潜在解决方案。