Rails 加入一个转折点
Rails JOINS with a twist
我已经尝试了 2 天,但都失败了 :) 以获得点赞的想法列表(基本上是帖子)。最好订购 Desc。
我有脚手架的想法和用户,效果很好。
赞(社交gem)让我头疼。
我可以添加喜欢并检索它们。而且我还可以找出一个特定想法有多少喜欢:idea.likers(User).count
并找出用户是否喜欢特定的想法:user.likes?(idea)
但我无法进行聚合,因为非标准字段名称禁止我进行 JOIN。
create_table "likes", force: :cascade do |t|
t.string "liker_type"
t.integer "liker_id" (this is/should be user_id)
t.string "likeable_type"
t.integer "likeable_id" (this is/should be idea_id)
t.datetime "created_at"
end
add_index "likes", ["likeable_id", "likeable_type"], name: "fk_likeables"
add_index "likes", ["liker_id", "liker_type"], name: "fk_likes"
型号:
- like.rb - 空
- user.rb - acts_as_liker
- idea.rb - acts_as_likeable
有没有办法加入喜欢和想法,例如以某种方式将 liker_id 匹配到 user_id?或者我应该重命名 table 中的字段(liker_id 到 user_id 和 likeable_id 到 idea_id)...?并添加这些:
like.rb
belongs_to :user
belongs_to :idea
idea.rb
has_many :likes, dependent: :destroy
user.rb
has_many :likes, dependent: :destroy
提前致谢!
要将不同的列指定为在连接中使用的外键,您可以将 foreign_key: ...
选项添加到 belongs_to
,如下所示:
# app/models/like.rb
belongs_to :user, foreign_key: :liker_id
belongs_to :idea, foreign_key: :likeable_id
请参阅 belongs_to 上的参考文档。
您也可以自己指定加入条件,如下:
Idea.joins('inner join likes on ideas.id = likes.likeable_id').where(...)
我已经尝试了 2 天,但都失败了 :) 以获得点赞的想法列表(基本上是帖子)。最好订购 Desc。
我有脚手架的想法和用户,效果很好。
赞(社交gem)让我头疼。 我可以添加喜欢并检索它们。而且我还可以找出一个特定想法有多少喜欢:idea.likers(User).count 并找出用户是否喜欢特定的想法:user.likes?(idea)
但我无法进行聚合,因为非标准字段名称禁止我进行 JOIN。
create_table "likes", force: :cascade do |t|
t.string "liker_type"
t.integer "liker_id" (this is/should be user_id)
t.string "likeable_type"
t.integer "likeable_id" (this is/should be idea_id)
t.datetime "created_at"
end
add_index "likes", ["likeable_id", "likeable_type"], name: "fk_likeables"
add_index "likes", ["liker_id", "liker_type"], name: "fk_likes"
型号:
- like.rb - 空
- user.rb - acts_as_liker
- idea.rb - acts_as_likeable
有没有办法加入喜欢和想法,例如以某种方式将 liker_id 匹配到 user_id?或者我应该重命名 table 中的字段(liker_id 到 user_id 和 likeable_id 到 idea_id)...?并添加这些:
like.rb
belongs_to :user
belongs_to :idea
idea.rb
has_many :likes, dependent: :destroy
user.rb
has_many :likes, dependent: :destroy
提前致谢!
要将不同的列指定为在连接中使用的外键,您可以将 foreign_key: ...
选项添加到 belongs_to
,如下所示:
# app/models/like.rb
belongs_to :user, foreign_key: :liker_id
belongs_to :idea, foreign_key: :likeable_id
请参阅 belongs_to 上的参考文档。
您也可以自己指定加入条件,如下:
Idea.joins('inner join likes on ideas.id = likes.likeable_id').where(...)