【问题标题】:Rails database query with conditions from two tables?使用来自两个表的条​​件进行 Rails 数据库查询?
【发布时间】:2013-04-09 18:34:20
【问题描述】:

我有这些模型:

class Post
  belongs_to :user
end

class User
  has_many :posts
end

我想获得任何来宾用户(即 user.role == 'guest')标题为“Some Title”的帖子。

标题在来宾用户中是唯一的,但某些非来宾用户的帖子可能具有该标题。我正在尝试使用Rails guideApi,但我似乎无法将正确的语法放在一起。

我希望它像 User.where(:role => 'guest').posts.find_by_title('some title') 一样简单,但这会引发 #ActiveRecord::Relation:0x4e6d380 的未定义方法 `posts'。

Post.find_by_title('some title', :conditions => {:users => {:role => 'guest'}, :joins => :users} 抛出 PG::Error: ERROR: missing FROM-clause entry for table "users"。

任何带有Post.joins(:users) 的东西都会抛出未找到名为“用户”的关联。

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    了解如何使用 ActiveRecord 方法 .joins,它会生成 SQL joins

    User.joins(:posts).where("users.role = ? AND posts.title = ?", 'guest', 'some title')
    

    【讨论】:

      【解决方案2】:

      在连接上尝试 Post.joins(:user)(不是 :users)。

      【讨论】:

      • 啊!我现在看到它是如何工作的。因为帖子只属于一个用户,所以 :user 应该是单数。如果我想要 User.joins(:posts),那么 :posts 将是复数,因为用户拥有多个帖子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      相关资源
      最近更新 更多