Показывать только те программы, где пользователь (подписано = true) - PullRequest
0 голосов
/ 12 июня 2018

У меня есть приложение Ruby on rails, где пользователи могут добавить одно или несколько программ.Затем эти пользователи могут подписаться (платный режим).

Я хотел бы иметь возможность отображать только все платные пользовательские программы.

Я перепробовал несколько вещей и до сих пор не могу найти решение.

например:

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

РЕДАКТИРОВАНИЕ:

ПОЛЬЗОВАТЕЛЬ модели:

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 голосов
/ 12 июня 2018

Я думаю, что ваша ошибка здесь:

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 })

Это отдельныйтему, но есть хорошее прочтение здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...