Joh*_*ohn 22 ruby-on-rails ruby-on-rails-3
拥有User,UserBadge和Badge表.它们通过has_many连接.用户可以拥有多个相同的徽章,但我想查询唯一的列表.
@user.badges.select("DISTINCT id").order("created_at DESC")
Run Code Online (Sandbox Code Playgroud)
这是一个错误:
SQLite3::SQLException: near "DISTINCT": syntax error:
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?
编辑:添加整个错误
SQLite3::SQLException: near "DISTINCT": syntax error: SELECT "badges".*, DISTINCT badges.id FROM "badges" INNER JOIN "userbadges" ON "badges".id = "userbadges".badges_id WHERE (("userbadges".user_id = 1))
Run Code Online (Sandbox Code Playgroud)
可能是select和distinct之间的逗号吗?
Mik*_*ike 27
在SELECT之后,DISTINCT需要笔直
SELECT DISTINCT(badges.id), "badges".* FROM "badges" INNER JOIN "userbadges" ON "badges".id = "userbadges".badges_id WHERE (("userbadges".user_id = 1))
Run Code Online (Sandbox Code Playgroud)
尝试:
@user.select("DISTINCT(badges.id), badges.*").badges.order("badges.created_at DESC")
Run Code Online (Sandbox Code Playgroud)
PostgreSQL要求您拥有distinct字段的订单声明:
@user.select("DISTINCT(badges.id), badges.*").badges.order("badges.id").order("badges.created_at DESC")
Run Code Online (Sandbox Code Playgroud)
Kel*_*end 21
可以尝试使用组
@user.badges.group(:id)
Run Code Online (Sandbox Code Playgroud)
组
:uniq => true
Run Code Online (Sandbox Code Playgroud)
关于协会.或者仅为用户的唯一徽章创建单独的关联.
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
就像是
Class User < ActiveRecord::Base
has_many :user_badges
has_many :badges, :through => :user_badges
has_many :unique_badges, :through => :user_badges, :source => :badges, :uniq => true
#untested
end
Run Code Online (Sandbox Code Playgroud)
尝试这个
@user.badges.select("DISTINCT(badges.id)").order("badges.created_at DESC")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42901 次 |
| 最近记录: |