我有4个表users
,user_details
,categories
和galleries
我想在一个查询中显示所有记录。请参阅下面的表格结构
类别
id
name
用户
id
username
email
password
user_type
is_active (0 or 1)
created_at
modified_at
user_details
id
user_id
category_id
name
gender
address
phone
画廊
id
user_id
name
image
is_active
我想获取user_details和category的用户id = 1的所有用户信息,并显示她/她来自galleries
表的所有is_active = 1图像
这是我的代码 -
@user_details = User.eager_load(:Category,:Gallery,:UserDetail).where('users.id'=>20, 'users.is_active'=>1, 'users.user_type'=>2, 'galleries.is_active'=>1).first()
我收到错误消息:
Association named 'Category' was not found on User; perhaps you misspelled it?
实际上,我已在Category
模型中关联了UserDetails
。所以我无法获得Category
数据。请看我的所有型号 -
category.rb
class Category < ActiveRecord::Base
has_many :UserDetail
end
user.rb
class User < ActiveRecord::Base
#before_save :encrypt_password
has_one :UserDetail, dependent: :destroy
has_many :Gallery, dependent: :destroy
end
user_detail.rb
class UserDetail < ActiveRecord::Base
belongs_to :User
belongs_to :Category
end
gallery.rb
class Gallery < ActiveRecord::Base
belongs_to :User
end
让我知道为什么categories
表没有加入。请帮我解决这个问题。
答案 0 :(得分:0)
以下是一些事情。匆忙所以无法验证语法,但应该让你非常接近
正确的关联命名 - 按惯例的关联应该是模型的单数或复数小写snake_case。所以画廊应该是
班级画廊 belongs_to:user
类用户 has_many:画廊
使用include加载值并阻止n + 1个查询
User.includes(:categories,:user_detail ,,:user_detail)
使用范围作为条件 @user_details = User.eager_load(:Category,:Gallery,:UserDetail).where(&#39; users.id&#39; =&gt; 20,&#39; users.is_active&#39; =&gt; 1,& #39; users.user_type&#39; =&gt; 2,&#39; galleries.is_active&#39; =&gt; 1).first()
类用户 范围:有效, - &gt; {where(is_active:1)} class:of_type, - &gt; (id){where(user_type:id)} 端
然后更像是
User.active.of_type(2).includes(:categories, :user_detail, ,:user_detail, :galleries).where('galleries.is_active'=>1).first()