Ruby on rails 有很多,通过关系而不是人口
我正在尝试允许用户模态添加和删除其他用户的个人设置,但我无法获得Ruby on rails 有很多,通过关系而不是人口,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在尝试允许用户模态添加和删除其他用户的个人设置,但我无法获得有许多。。。通过关系正常工作:我可以创建新的设置模态,但无法检索或删除它们 这是我的User.rb: class User < ActiveRecord::Base has_many :settings, class_name: "Setting", foreign_key: "user_id", de
有许多。。。通过关系正常工作:我可以创建新的设置模态,但无法检索或删除它们
这是我的User.rb:
class User < ActiveRecord::Base
has_many :settings, class_name: "Setting",
foreign_key: "user_id",
dependent: :destroy
has_many :user_settings, through: :settings, source: :user
def create_settings(user)
settings.create(following_id: user.id)
end
def delete_settings(user)
settings.find_by(following_id: user.id).destroy
end
def has_settings?(user)
user_settings.include?(user)
end
...
如果我调用add\u settings
然后remove\u settings
两次都会得到成功响应,但是如果我再次调用add\u settings
,我会得到错误:
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_settings_on_user_id_and_following_id"
因此,似乎User.rb中的具有\u设置
,在调用控制器功能删除\u设置
时,用户设置始终返回false,并且从未删除
为什么没有填充用户设置
关系?如何获取has\u settings
以返回正确的值?user\u settings.include?(user)
将始终返回false,因为user\u settings
是user\u settings
对象的集合,而不是user
对象。此外,在此处调用include?
可能效率不高,因为它需要将多个user\u设置
对象加载到内存中以比较每个对象
根据user\u settings
和settings
的定义方式,您应该能够使用以下查询来检查是否有属于此用户的user\u settings
(self
)。请尝试以下查询:
def has_settings?(user)
settings.exists?(following_id: user.id)
end
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_settings_on_user_id_and_following_id"
def has_settings?(user)
settings.exists?(following_id: user.id)
end