2012-03-30 65 views
2

我有兩個類之間的關聯問題,所以我這裏有一個名爲後重命名foreign_key在Rails的覆蓋公約

Class CreatePosts < ActiveRecord::Migration 
    def change 
    create_table :posts do |t| 
     t.string :post_type , null: false 
     t.text :content , null: false 
     t.integer :person_id 
    end 
    add_index :posts, :person_id 
    add_index :posts, :group_id 
    end 
end 

一類表,另一種被稱爲行動

class CreateActions < ActiveRecord::Migration 
    def change 
    create_table :actions do |t| 
     t.string :target_type, null:false 
      t.integer :target_id 
     t.integer :upvote_count 
     t.timestamps 
    end 
     add_index :actions,:target_id 
    end 
end 

所以問題是我想關聯target_is作爲Post類的外鍵所以我做了這個

class Post < ActiveRecord::Base 
    has_one :action 
end 
class Action < ActiveRecord::Base 
    belongs_to :post , :class_name => 'Target', :foreign_key => 'target_id' 
end 

但不工作,這時候我在帖子Action對象分配到的操作方法反對這種錯誤的出現

Mysql2::Error: Unknown column 'actions.post_id' in 'where clause': SELECT `actions`.* FROM `actions` WHERE `actions`.`post_id` = 6 LIMIT 1 

所以任何幫助?

回答

1

我想你正試圖應用多態關聯。嘗試一下。

class Post < ActiveRecord::Base 
has_one :action, :as => :target 
end 

class Action < ActiveRecord::Base 
belongs_to :target, :polymorphic => true 
end 
+0

這正是我需要的,THX – Azzurrio 2012-03-30 09:13:37

+0

這可能是什麼// @ Azzurrio想要但顯然不回答這個問題。 – pkoch 2013-05-08 15:44:22

+0

我根據他問的問題提出了一個更好的解決方案。我不只是回答這個問題,我指的是一個正確的方向。 – 2013-10-06 13:20:25