Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有很多,通过关系而不是人口_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

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