仅显示用户(subscribed = true)

时间:2018-06-12 15:54:09

标签: ruby-on-rails

我有一个Ruby on rails应用程序,用户可以在其中添加一个或多个软件。 然后,这些用户可以订阅(付费模式)。

我希望能够只显示所有付费用户软件。

我尝试了几件事但仍无法找到解决方案。

例如:

Software.includes(:users).where(user: {subscribed: true})

编辑:

型号USER:

class User < ActiveRecord::Base
   has_many :softwares
end

模型软件:

class Software < ActiveRecord::Base
   belongs_to :user
end

JoinTable

    class CreateJoinTableUsersSoftwares < ActiveRecord::Migration[5.2]
  def change
    create_join_table :users, :softwares do |t|
      t.index [:user_id, :software_id]
      t.index [:software_id, :user_id]
    end
  end
end

错误:

Software.includes(:users).where(user: {subscribed: true})


ActiveRecord::ConfigurationError (Can't join 'Software' to association named 'users'; perhaps you misspelled it?)

1 个答案:

答案 0 :(得分:2)

我认为你的错误就在这里:

Software.includes(:users).where(user: {subscribed: true})

includes应反映关联,在本例中为单数user。这就是造成您所看到错误的原因。

此外,它是一个常见问题,但where子句中的关联需要使用表名。

试试这个:

Software.includes(:user).where(users: { subscribed: true })

这假设您将在user处使用其他地方的信息,即在您的视图中。如果您不需要访问记录,只需查看user查询,就可以将includes切换为joins以提高查询的效率:

Software.joins(:user).where(users: { subscribed: true })

这是一个单独的主题,但有一个很好的阅读here