Я хочу, чтобы повысить пользователь следующим с ожидающим статусом:ActiveRecord has_many: через где статус = «в ожидании»
class Relationship < ActiveRecord::Base
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
end
class User < ActiveRecord::Base
has_many :active_relationships, class_name: "Relationship",
foreign_key: "follower_id",
dependent: :destroy
has_many :following, through: :active_relationships, source: :followed
has_many :passive_relationships, class_name: "Relationship",
foreign_key: "followed_id",
dependent: :destroy
has_many :followers, through: :passive_relationships, source: :follower
end
Итак, я добавил одну миграции в поле состояния
rails g migration AddStatusToRelationships
class AddStatusToRelationships < ActiveRecord::Migration
def change
add_column :relationships, :status, :string
end
end
Отношение таблица теперь выглядит как
id | follower_id | followed_id | status
Цель состоит в том, чтобы показать отношения со статусом: "pending"
мой подход к повышению
has_many :followers, through: :passive_relationships, source: :follower
с чем-то вроде
has_many :followers, -> { where status: "pending" }, through:
:passive_relationships, source: :follower
дает мне
SQLite3::SQLException: no such column: users.status: SELECT COUNT(*)
FROM "users" INNER JOIN "relationships"
ON "users"."id" = "relationships"."follower_id"
WHERE "relationships"."followed_id" = ?
AND "users"."status" = 'pending'
Так что я попытался
has_many :followers, through: :passive_relationships -> {
where status: "pending" }, source: :follower
который возвращает
SyntaxError in UsersController#show app/models/user.rb:20:
syntax error, unexpected ->, expecting keyword_end ...ough:
:passive_relationships -> { where status: "pending" },
... ...^app/models/user.rb:20:
syntax error, unexpected ',', expecting keyword_end ...-> {
where status: "pending" }, source: :follower ...^
Я попытался также
has_many :pending, through: :passive_relationships,
source: :follower,
:conditions => ['passive_relationships.status = ?','pending']
который возвращает
Unknown key: :conditions. Valid keys are: :class_name, :anonymous_class,
:foreign_key, :validate, :autosave, :table_name, :before_add, :after_add,
:before_remove, :after_remove, :extend, :primary_key, :dependent, :as,
:through, :source, :source_type, :inverse_of, :counter_cache, :join_table,
:foreign_type
Спасибо за помощь!
Это указывает на user.status, вместо того, чтобы отношения .status
SQLite3 :: SQLException: нет такого столбца: users.status: SELECT COUNT (*) FROM "users" INNER JOIN "отношения" ON "users". "id" = "отношения". "follower_id" WHERE "отношения" . "follow_id" =? И «пользователи». «Status» = «pending» –
@Stef Hej обновится на минуту, просто используйте 'joins' –
работает точно так, как ожидалось, спасибо !!! –