我很確定我有我的模型設置正確的標準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
=> []
所以聯想似乎是工作在一定程度上。我越來越有信心,我失去了一些小而明顯或巨大而耀眼的東西。請幫忙!謝謝!
對於這種情況,您應該運行'rails destroy model Categorizations'或'rails destroy scaffold Categorizations'(如果您生成腳手架)。在哪個視圖中你有'<%= f.association:category%>'?表單是通過分類建立的嗎? – pablomarti
OOO。我甚至不知道「銷燬模型」是一件事情,所以非常感謝。該視圖位於'PressRelease'的_form.html.erb中......這是正確的,對吧? – afxjzs