`
CaiDeHen
  • 浏览: 94295 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

has_many 多态的多态

    博客分类:
  • ruby
阅读更多
User has_many Categories
Category has_many Posts
当Category和Post同为多态时。这样
class User < ActiveRecord::Base
  has_many :categories, :as => :owner #owner_id owner_type
  has_many :posts, :through => :categories
end
class Category < ActiveRecord::Base
  has_many :posts, :as => :postable #postable_id, postable_type
  belongs_to :user, :polymorphic => true
end
class Post < ActiveRecord::Base
  belongs_to :postable, :polymorphic => true
end

当调用user.posts时就会报错
错误原因

  Unknown column 'categories.postable_id' in 'on clause': SELECT posts.* FROM posts INNER JOIN categories ON posts.id = categories.postable_id WHERE ((categories.owner_id = 1) AND (categories.owner_type = 'User'))

红色部分期望的应该是posts.postable_id = categories.id,这里正好相反了
而将代码改为
class User < ActiveRecord::Base
  has_many :categories, :foreign_key => "owner_id", :conditions => "owner_type = 'User'" #owner_id owner_type
  has_many :posts, :through => :categories
end

就可以正常使用了。
y?
分享到:
评论

相关推荐

    程序员专用刷题-rails-useful-resources:学习RubyOnRails的有用链接集合

    has_many 的计数排序:通过关联: 协会 rails 中的多对多关联: has_and_belongs_to_many: 多态关联: 协会提醒: 包括 文档: 包括 vs 连接: N+1 问题 什么是 n+1 查询问题: 如何诊断n+1问题: 路由/漂亮的 URL ...

    rails6-silver

    属于/有has_many --- --- 模型关联 有很多 通过 为其他模型设置多对多连接 价值对象 由...组成的 --- --- 支持PostgreSQL --- --- 应用网络地址类型 动作视图 概念/功能 方法 选项 象征 加工 提交ID 帮手 url_...

    polymorphic_embed:Ecto中的多态嵌入

    在Ecto中,我们通常使用`has_many`和`belongs_to`来定义一对多或一对一的关联,但这些关联通常限定于两个特定的模型之间。然而,`polymorphic_embed`允许我们将一个模型嵌入到另一个模型中,且被嵌入的模型可以是...

    polymorphic_test:我在多态 hasMany 关系和 Ember-Data 1.0.0-beta.14.1 中遇到的问题的描述

    多态测试这个 repo 只是为了描述我在多态 hasMany 关系和 Ember-Data 1.0.0-beta.14.1 版中遇到的一个问题。 在应用程序的新加载时,第一次更改关系并将其保存到服务器时,关系将被清空,同时正确保存后续更新。 这...

    store_base_sti_class:修改ActiveRecord 4+,使其能够在使用STI时将实际类(而不是基类)存储在多态_type列中

    has_many :addresses , :as =&gt; addressable end class Vendor &lt; Person end 并给出以下代码: vendor = Vendor . create ( ... ) address = vendor . addresses . create ( ... ) p vendor p address 将输出...

    Laravel开发-eloquent-inheritance-storage

    在关联的另一端,比如在`Article`和`Product`模型中,我们需要定义一个多态 belongsTo 或 hasMany 的关联。例如,在`Article`模型中: ```php class Article extends Model { public function medias() { return...

    Laravel开发-laravel-commentable .zip

    在这个项目中,可能会有一个`Comment`模型,它代表数据库中的评论表,并通过Eloquent的关系方法(如hasMany或morphMany)与其他模型关联。 2. **数据库迁移**: "Laravel开发-laravel-commentable"可能包含迁移文件...

    Laravel开发-reportable

    在模型类中定义多态关联,如`belongsTo`、`hasMany`或`morphToMany`方法,指定关联的模型和关联类型。 3. **编写报告逻辑:** 在报告类中编写用于生成报告的逻辑,这可能涉及查询数据库、聚合数据、格式化结果等...

    Laravel开发-relationships

    比如,一个教师可以教多个班级,你可以使用`hasMany`方法定义教师与班级的关系。反向关系则可以通过`belongsTo`来建立。 3. **多对多关系 (Many-to-Many)** 多对多关系是最复杂的,涉及到一个中间表来存储两个模型...

    Laravel5.1 框架模型远层一对多关系实例分析

    例如,其他常见的关系类型包括一对一(hasOne / belongsTo),一对多(hasMany / belongsToMany),多对多(belongsToMany),以及多态关联等。在实际项目中,根据业务需求灵活运用这些关系,可以使数据库操作更加...

    ember-cli-spring-boot:ember-data 的 Spring Boot 集成

    ##Feature 详细信息 ###Lazy 加载所有关系所有DS.belongsTo()和DS.hasMany()关系都应该用{async : true}标记。 这意味着所有关系都是延迟加载的(Hibernate 喜欢这个)。 //blog export default DS . Model . ...

    Laravel等框架模型关联的可用性浅析

    在Laravel中,模型关联主要有以下几种类型:一对一(hasOne)、一对多(hasMany)、多对多(belongsToMany)以及多态关联(morphTo、morphOne、morphMany)。以Laravel为例,我们可以通过定义关联方法来设置这些关系...

    Laravel开发-models .zip

    - Eloquent支持多种关联关系,如一对一(`hasOne`, `belongsTo`),一对多(`hasMany`, `belongsToMany`),多对多(`belongsToMany`)以及多态关联(`morphOne`, `morphMany`, `morphTo`)。 - 定义关联关系的...

    Laravel开发-eloquent-only

    3. **关系(Relationships)**: Eloquent支持多种类型的关系,包括一对一(hasOne)、一对多(hasMany)、多对多(belongsToMany)、多态关系(morphTo、morphOne、morphMany)等。通过定义这些方法,可以在模型之间...

    Laravel开发-eloquent-base-model

    - `hasOne`, `hasMany`, `belongsTo`, `belongsToMany`:定义一对一、一对多、多对一和多对多的关系。 - `with`:用于预加载关联数据,减少N+1查询问题。 - `hasManyThrough`:定义通过中间表建立的多对多关系。 ...

    EF6Fluent API+AutoMapper.EF6使用

    .HasMany(u =&gt; u.Articles) .WithOptional(a =&gt; a.Author); ``` 3. **配置主键**:可以自定义主键的属性和顺序。比如: ```csharp modelBuilder.Entity() .HasKey(u =&gt; new { u.Id, u.Version }); ``` 4. *...

    laravel-eloquent-relationships

    这种关系通过`hasMany`和`belongsTo`定义: ```php // User模型 public function posts() { return $this-&gt;hasMany(Post::class); } // Post模型 public function user() { return $this-&gt;belongsTo(User::class...

    laravel 关联关系遍历数组的例子

    - 远程一对多(Has Many Through) - 多态关联(Polymorphic Relationships) - 远程一对一(Has One Through) ### 遍历数组 在Web开发中,遍历数组是一项基础且重要的操作。Laravel提供了多种方式来遍历数组,...

Global site tag (gtag.js) - Google Analytics