Rails加入了扭曲

时间:2015-02-16 16:36:32

标签: ruby-on-rails join activerecord

我一直在尝试并且失败了2天:)以获得想法列表(基本上是帖子)。最好订购描述。

我有脚手架的想法和用户工作正常。

喜欢(社交宝石)让我头疼。 我可以添加喜欢并检索它们。我还可以找出有多少喜欢特定的想法:idea.likers(User).count 并找出用户是否喜欢特定的想法:user.likes?(idea)

但由于禁止我加入的非标准字段名称,我无法进行聚合。

  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 - empty
  • user.rb - acts_as_liker
  • idea.rb - acts_as_likeable

有没有办法加入喜欢和想法,例如以某种方式将liker_id与user_id匹配?或者我应该重命名表中的字段(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

提前致谢!

1 个答案:

答案 0 :(得分:0)

要将另一列指定为在连接中使用的外键,您可以向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(...)