Rails 3'关联:[...]找不到'has_many的错误:通过关系

时间:2012-12-09 19:22:39

标签: ruby-on-rails activerecord

我很确定我的模型已正确设置为标准has_many:通过关系...但是,我使用了一个模型创建它的rails生成器,并且第一次运行它时,我意外地创建了一个模型称为Categorizations(复数)而不是Categorization,并且在我意识到错误之前一直在设置所有内容。我回滚了迁移并删除了生成器创建的4个文件(迁移,模型,规范,工厂)。我重新开始,我还在 Association :category not found为错误。

我的主要问题: 还有什么我需要撤消的,因为我不小心创建并删除了一个复数名称的模型吗?

后续问题: 如果那不是问题,那么我做错了什么?是否有一些明显的疏忽,因为我一直盯着这么久?

跟进后续行动: 我还能做些什么来帮助解决此问题?所有模型都可以在控制台中访问,似乎设置正确。模型关联有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 个答案:

答案 0 :(得分:1)

如果您正在使用PressRelease,则应使用<%= f.association :categories %>,因为这种关系,请更改:category :categories