2015-09-16 19 views
0

我正在用PG構建Rails項目,並試圖使用ResourceTopic表將我的主題和資源鏈接在一起(這樣我可以將多個標籤分配給一個資源)。我也在智慧的結尾!它會保存topic_id,然後拒絕保存resource_id。未知屬性錯誤 - 無法寫入resource_id

我有這條線在我的數據庫的底部:種子文件:

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 

這裏是有問題的遷移:

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 

事情我已經嘗試過:

  1. 切割指數:從belongs_to的關聯
  2. 破壞並重新創建DB真(約25倍)
  3. 重新排序協會

文字錯誤匹配工作示例(第66行是我抄在文件的頂部):

ActiveModel::MissingAttributeError: can't write unknown attribute `resource_id` 
/Users/galactus/code/panic_button/db/seeds.rb:66:in `<top (required)>' 

回答

0

resource_topics表沒有resource_id列它需要有爲了這個協會的工作。

您的遷移文件不一定代表數據庫的實際狀態。您尚未運行遷移,或者運行了早期版本的遷移(未引入resource_id列),然後修改遷移文件而不重新運行。

0

DB:RESET - 從模式讀取數據。

DB:ROLLBACK - 從最新的遷移中讀取數據。在這種情況下,即使在遷移後,使用db:reset意味着我在其他文件中修復的錯誤仍然存​​在。

0

我知道這是有點老了,但你的問題,你說,這將

「拒絕拯救RESOURCE_ID」

,但你已經宣佈:resource_idattr_accessor,這意味着它沒有數據庫列,也沒有保存到數據庫。請看here的澄清。有從@Kaleidoscope回答一個偉大的行總結時,他說

「如果你聲明attr_accessor那麼你可以使用它作爲一個虛擬屬性,這基本上是對模型ISN」的屬性t堅持到數據庫。「

我不清楚,但是,你是如何使用:resource_id。我剛剛遇到了這個相同的錯誤,而不是嘗試將值存入數據庫,而只是試圖爲屬性賦值。如果您的解決方案與我提供的解決方案不同,那麼我很想知道它是什麼,如果它是我的錯誤的潛在解決方案。

相關問題