未知属性错误 - 无法写入resource_id

时间:2015-09-16 20:23:06

标签: ruby-on-rails

我正在使用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

我尝试过的事情:

  1. 切割索引:来自belongs_to关联的真实
  2. 销毁并重新创建数据库(约25次)
  3. 重新排序关联以匹配工作示例
  4. 文字错误(第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
    

3 个答案:

答案 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以获得澄清。当他说

时,@ Kaleidoscope的答案中有一个很好的单行摘要
  

&#34;如果您声明一个attr_accessor,那么您可以将其用作虚拟属性,这基本上是模型中不会持久保存到数据库的属性。&#34;

但是,我不清楚你如何使用:resource_id。我只是遇到了同样的错误,而不是试图将值保存到数据库,而只是尝试为属性赋值。如果您的解决方案与我提供的解决方案不同,我很想知道它是什么,如果它是我的错误的潜在解决方案。