ruby-on-rails – has_many:通过has_and_belongs_to_many关联
发布时间:2020-12-16 23:31:42 所属栏目:百科 来源:网络整理
导读:我试图在 Ruby on Rails项目中执行以下操作: class FoodItem ActiveRecord::Base has_and_belongs_to_many :food_categories has_many :places,:through = :food_categoriesendclass FoodCategory ActiveRecord::Base has_and_belongs_to_many :food_items
我试图在
Ruby on Rails项目中执行以下操作:
class FoodItem < ActiveRecord::Base has_and_belongs_to_many :food_categories has_many :places,:through => :food_categories end class FoodCategory < ActiveRecord::Base has_and_belongs_to_many :food_items belongs_to :place end class Place < ActiveRecord::Base has_many :food_categories has_many :food_items,:through => :food_category end 但调用实例方法some_food_item.places会给我以下错误: ActiveRecord::StatementInvalid: PGError: ERROR: column food_categories.food_item_id does not exist LINE 1: ...laces".id = "food_categories".place_id WHERE (("food_cate... : SELECT "places".* FROM "places" INNER JOIN "food_categories" ON "places".id = "food_categories".place_id WHERE (("food_categories".food_item_id = 1)) 这很有道理 – 因为FoodItem和FoodCategory上的HABTM我有一个名为food_categories_food_items的映射表. 我需要做些什么才能让some_food_item.places通过映射表正确查找位置,而不是在food_categories表中查找food_item_id? 解决方法
我的第一个答案版本不正确,但这个版本完美无缺.我第一次做了一些拼写错误(实际上没有创建应用程序进行测试的危险),但这次我验证了.并且需要一个插件,但这很容易.首先,安装插件:
script/plugin install git://github.com/ianwhite/nested_has_many_through.git 这将安装Ian White的解决方法,并且无缝地工作.现在模型,直接从我设置的测试应用程序复制,以使其工作: class FoodItem < ActiveRecord::Base has_many :food_category_items has_many :food_categories,:through => :food_category_items has_many :places,:through => :food_categories end class FoodCategory < ActiveRecord::Base has_many :food_category_items has_many :food_items,:through => :food_category_items belongs_to :place end class FoodCategoryItem < ActiveRecord::Base belongs_to :food_item belongs_to :food_category end class Place < ActiveRecord::Base has_many :food_categories has_many :food_category_items,:through => :food_categories has_many :food_items,:through => :food_category_items end 现在“远”协会的工作也一样. place_instance.food_items和food_item.places都可以完美地工作,以及更简单的协会.仅供参考,这是我的架构,以显示所有外键的位置: create_table "food_categories",:force => true do |t| t.string "name" t.integer "place_id" t.datetime "created_at" t.datetime "updated_at" end create_table "food_category_items",:force => true do |t| t.string "name" t.integer "food_item_id" t.integer "food_category_id" t.datetime "created_at" t.datetime "updated_at" end create_table "food_items",:force => true do |t| t.string "name" t.datetime "created_at" t.datetime "updated_at" end create_table "places",:force => true do |t| t.string "name" t.datetime "created_at" t.datetime "updated_at" end 希望这可以帮助! 更新:这个问题最近出现了几次.我写了一篇文章,nesting your has_many :through relationships,详细解释.它甚至在GitHub上有一个附带的示例应用程序来下载和玩. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Swift Playground中的NSTimer.scheduledTimerWithTimeInter
- 在运行时基于提供的依赖关系动态创建Java类的实现
- RNQOJ [stupid]愚蠢的矿工(树形依赖背包)
- ruby-on-rails – 警告:已初始化常量VERIFY_PEER
- flex 怎么清空datagrid
- ruby-on-rails – rake:测试没有在子目录中运行自定义测试
- rails 国际化、validate校验、flash提示
- xml 转xsd->xsd转c,c++
- 12佳精美的国外 Flash 网站模板下载(附源文件)
- c – 无法使用curl – undefined引用在Linux中编译