2012-12-09 50 views
0

我很確定我有我的模型設置正確的標準has_many:通過關係...但是,我用一個軌道發電機的模型來創建它,當我第一次運行它時,我意外地創建了一個名爲Categorizations(複數)的模型,而不是Categorization,並在我意識到錯誤之前一路設置了所有事情。我回滾遷移並刪除了由生成器創建的4個文件(遷移,模型,規範,工廠)。我重新開始,我仍然得到 Association :category not found作爲錯誤。Rails 3'協會:[...]找不到'錯誤has_many:通過關係

我的主要問題: 還有什麼我需要撤消,因爲我不小心創建並刪除了複數名稱的模型?

後續問題: 如果這不是問題,那麼我在做什麼錯了?有沒有明顯的疏忽,因爲我一直盯着這麼久?

跟進後續行動: 我還能做些什麼來幫助解決這個問題?所有的模型都可以在控制檯中訪問,並且似乎設置正確。模型關聯有沒有rake routes

這裏是我有我的觀點:

<%= f.association :category %>

我也試過:

<%= f.association :category, :required => true, :collection => @categories, :as => :check_boxes, :label => "Categories:" %>(我已經在控制器中設置@categories

這裏有型號:

class PressRelease < ActiveRecord::Base 
    has_many :categorizations 
    has_many :categories, :through => :categorizations 

    belongs_to :user 
    belongs_to :press_contact 

    attr_accessible :body, :summary, :user_id, :headline, :link, :press_contact_id, :publish_date, :subheadline 

    self.per_page = 5 

    def published 
    "#{self.publish_date.strftime("%A, %B %d, %Y")}" 
    end 

end 

class Category < ActiveRecord::Base 
    has_many :categorizations 
    has_many :press_releases, :through => :categorizations 
    attr_accessible :description, :label 
end 

class Categorization < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :press_release 

    attr_accessible :category_id, :press_release_id 

end 

更新:控制檯中的這一切工作:

pr = PressRelease.first 
pr.categories 
Category Load (0.2ms) SELECT "categories".* FROM "categories" INNER JOIN "categorizations" ON "categories"."id" = "categorizations"."category_id" WHERE "categorizations"."press_release_id" = 1 

c = Category.first 
c.press_releases 
PressRelease Load (0.3ms) SELECT "press_releases".* FROM "press_releases" INNER JOIN "categorizations" ON "press_releases"."id" = "categorizations"."press_release_id" WHERE "categorizations"."category_id" = 21 
=> [] 

所以聯想似乎是工作在一定程度上。我越來越有信心,我失去了一些小而明顯或巨大而耀眼的東西。請幫忙!謝謝!

+1

對於這種情況,您應該運行'rails destroy model Categorizations'或'rails destroy scaffold Categorizations'(如果您生成腳手架)。在哪個視圖中你有'<%= f.association:category%>'?表單是通過分類建立的嗎? – pablomarti

+0

OOO。我甚至不知道「銷燬模型」是一件事情,所以非常感謝。該視圖位於'PressRelease'的_form.html.erb中......這是正確的,對吧? – afxjzs

回答

1

如果您在PressRelease上工作,您應該使用<%= f.association :categories %>,因爲這種關係,請將:category更改爲:categories

+0

GREAT SUCCESS。奇怪的是,我之前曾嘗試過這種方法,但其他方面也一定會被打破,因爲它不起作用。無論哪種方式,謝謝! – afxjzs

+0

酷!呦歡迎! – pablomarti