2014-05-01 80 views
0

在控制檯

a = Reported.new 

這工作。修補後。Rails的關係數據庫不工作我多麼希望

a.profile = Profile.first 

但這不是我想要的!我想a.profile甚至存在。我想要a.reported_by成爲個人資料!我希望a.reported是一個配置文件!

再次我要的是

a.reported_by = Profile.last #or any such profile 
a.reported = Profile.first #or any such profile 

型號

class Profile < ActiveRecord::Base 
    has_many :reported, dependent: :destroy 

遷移

它沒有報告的專欄,我不知道要執行,要麼以正確的方式。

class CreateReporteds < ActiveRecord::Migration 
    def change 
    create_table :reporteds do |t| 
     t.belongs_to :profile 
     t.integer :reported_by 
     t.string :reason 
     t.timestamps 
    end 
    end 
end 
+0

你想'a.blocked_by'或者是'你確定a.reported_by'?這是一個錯字嗎? –

+0

啊,謝謝Kirti!這是一個錯字! @KirtiThorat,但我仍然有我的問題! – bezzoon

回答

1

您的移植似乎...關閉。我從來沒有在遷移過程中看到過t.belongs_to :something - 不應該是t.integer :profile_id? (我找不到支持belongs_to語法的文檔)。

如果你想Reported#reported_by返回Profile,那麼你需要一個整數reported_by_id,而不是一個reported_by整數。 Rails有一個慣例,你應該讓你的引用對象(在這種情況下,關係)使用relationship_id格式作爲它的外鍵。

那麼你應該有這個在你的類:

class Reported < ActiveRecord::Base 
    belongs_to :reported_by, class_name: "Profile" 
end 

所以它使用reported_by_id作爲一個Profile對象外鍵這將使得它,但返回它Reported#reported_by

然後:

class Profile < ActiveRecord::Base 
    has_many :reporteds, foreign_key: 'reported_by_id' 
end 

應該讓你做Profile#reporteds

而且遷移應該是這樣的:

class CreateReporteds < ActiveRecord::Migration 
    def change 
    create_table :reporteds do |t| 
     t.integer :reported_by_id 
     t.string :reason 
     t.timestamps 
    end 
    end 
end 
+0

好的!所以現在a.reported_by = Profile.last可以工作。但是我希望a.reported帶來已報告的個人資料!它仍然不起作用! – bezzoon

+0

NVM我知道它與belongs_to一起工作:報告,class_name:「Profile」 – bezzoon

+1

好吧,請確保你在桌上也有'reported_id'; – nzifnab