Ruby on rails 控制器中未执行Ruby on rails模型方法
posts\u controller.rb销毁方法 post.rb 当我检查销毁帖子时正在运行的查询时,我只能看到.exists?运行而不是.post_是我的,当它返回真值时,它就会通过 我尝试了几个其他名称作为方法,因为可能会有问题,甚至只是尝试使用.post___语句,但查询仍然没有运行Ruby on rails 控制器中未执行Ruby on rails模型方法,ruby-on-rails,activerecord,methods,model,execute,Ruby On Rails,Activerecord,Methods,Model,Execute,posts\u controller.rb销毁方法 post.rb 当我检查销毁帖子时正在运行的查询时,我只能看到.exists?运行而不是.post_是我的,当它返回真值时,它就会通过 我尝试了几个其他名称作为方法,因为可能会有问题,甚至只是尝试使用.post___语句,但查询仍然没有运行 模型上是否存在如何使用where子句的问题?where将返回一个空集合,其计算结果为truthy。您需要添加一个检查,以查看其中是否有任何记录来获得正确的真/假 def self.post_is_mine(
模型上是否存在如何使用where子句的问题?where将返回一个空集合,其计算结果为truthy。您需要添加一个检查,以查看其中是否有任何记录来获得正确的真/假
def self.post_is_mine(post_id, user_id)
where("user_id = ? and post_id = ?", user_id, bucket_id).any?
end
where将返回一个空集合,其计算结果为truthy。您需要添加一个检查,以查看其中是否有任何记录来获得正确的真/假
def self.post_is_mine(post_id, user_id)
where("user_id = ? and post_id = ?", user_id, bucket_id).any?
end
对。其中返回用于生成查询的ActiveRecord关系。您的代码中不会计算该关系,因此永远不会执行来自.post\u is\u mine的查询。如果Post.postis mineparams[:id],则current_user.id返回true,因为关系对象不是nil
你真正想要的是使用存在?在post_是_mine方法
编辑:
我很好奇我的答案和帕林的答案之间的区别。对于任何想知道:
存在吗?使用SELECT 1 FROM执行SQL语句
有吗?使用SELECT COUNT*FROM执行SQL语句
在实践中,两者之间可能没有太大区别,但一些粗略的基准表明有什么区别?OSX上的AR 3.2.6和Postgresql 9.1速度更快是的。其中返回用于生成查询的ActiveRecord关系。您的代码中不会计算该关系,因此永远不会执行来自.post\u is\u mine的查询。如果Post.postis mineparams[:id],则current_user.id返回true,因为关系对象不是nil
你真正想要的是使用存在?在post_是_mine方法
编辑:
我很好奇我的答案和帕林的答案之间的区别。对于任何想知道:
存在吗?使用SELECT 1 FROM执行SQL语句
有吗?使用SELECT COUNT*FROM执行SQL语句
在实践中,两者之间可能没有太大区别,但一些粗略的基准表明有什么区别?在OSX上使用AR 3.2.6和Postgresql 9.1更快感谢扩展的信息,真的帮助我理解其中的差异感谢扩展的信息,真的帮助我理解其中的差异
def self.post_is_mine(post_id, user_id)
where("user_id = ? and post_id = ?", user_id, bucket_id).any?
end
def self.post_is_mine(post_id, user_id)
exists?(:user_id => user_id, :post_id => bucket_id)
end