Tag: 命名范围

动态访问命名范围

如果我有3个命名范围,如 class Foo scope :test1, … scope :test2, … scope :test3, … 还有一个function def x(variable) end 其中variable是一个字符串(“test1”,“test2”或“test3”) 如何通过知道变量的值来访问命名范围? 有点像Foo.variable

在RoR中将简单查询转换为棘手的命名范围

我有一个简单的范围问题。 我想这样做作为一个范围: if article.responses.blank? return false elsif article.responses.last.passed.eql?(false) return true else return false end 所以在文章模型上我会有这样的事情: scope :failed_response, { :joins=>[:responses], :conditions=>[“responses.passed = ?”, false] } 问题是,我只想要最近响应失败的实例。 我确信这些是用花式排序或某种嵌套查询来做到这一点的方法,但我被卡住了。 谢谢!

命名范围仅搜索连接表的第一个结果

我在使用命名范围时遇到问题,SQL不是我的强项。 我想返回所有机器,它已经进行了最后一次测试失败。 我的机器型号: has_many :lodged_tests, :dependent => :destroy has_one :last_test, :class_name => ‘LodgedTest’, :order => ‘created_at DESC’ named_scope :last_test_failed, :joins => :last_test, :conditions => [ “lodged_tests.is_passed = ?”, false] named_scope确实有效,除了它返回任何失败测试的机器。 我需要它来返回只有最近(最后)测试失败的机器。 下面链接到我正在尝试做的快速图表。 命名范围图 任何帮助都会非常感谢。

在has_many关联中为“no children”创建named_scope

我想为没有post的博客提供一个named_scope。 以下不起作用。 class Post < ActiveRecord::Base belongs_to :blog end class Blog “blogs.id NOT IN (SELECT blog_id FROM posts)” end

Rails模型的默认条件

我有一个模型,其中有一个名为deleted的字段,用于标记那些已删除的项目。 所以通常我只想查询那些deleted = false项目,并在某些特殊情况下列出那些已删除的项目以进行恢复。 有可能吗? 我现在能做的就是使用命名范围:conditions => {:deleted => false} 有没有更好的方法来做到这一点,当我做Item.other_named_scope ,我可以找到所有那些未删除的项目?

我可以在Rails中创建一个* un *命名范围吗?

我知道你可以在Rails中创建命名范围,它允许你指定可以在以后构建的条件: named_scope :active, :conditions => {:active => true} … MyModel.active.find(…) 这可以通过创建一个代理对象来实现,直到稍后才对其进行评估。 我想知道的是,是否可以创建一个动态的未命名范围? 我的意思是,有一种方法’foo’我可以去 scope = MyModel.foo(:conditions => {:target_id => 4}) 然后传递scope作为代理对象,我可以做更多.find s或其他范围的调用?

Ruby on Rails的空范围

以下问题: 我需要像空的范围。 这意味着此范围是emtpy,但响应范围通常响应的所有方法。 我目前正在使用一些肮脏的黑客。 我只是提供“1 = 0”作为条件。 我觉得这很难看,因为它击中了数据库。 简单地返回一个空数组将不起作用,因为结果必须响应作用域方法。 有没有更好的现有解决方案或我需要自己编码? 也许一些示例代码可以帮助解释我需要的东西: class User {:admin => true } named_scope :none_dirty, :conditions => “1=0” # this scope is always empty def none_broken [] end def self.sum_score # okay, a bit simple, but a method like this should work! total = 0 self.all.each do |user| total += user.score […]

重用named_scope来定义另一个named_scope

我看到问题的本质 有一天,如果我没弄错的话,我已经看到了重用named_scope来定义另一个named_scope的例子。 像这样的东西(不记得确切的语法,但这正是我的问题): named_scope :billable, :conditions => … named_scope :billable_by_tom, :conditions => { :billable => true, :user => User.find_by_name(‘Tom’) } 问题是:如果可能的话,确切的语法是什么? 我找不到它,谷歌也没有帮助。 一些解释 为什么我真的想要它,是因为我使用Searchlogic来定义一个复杂的搜索,这可能会产生如下表达式: Card.user_group_managers_salary_greater_than(100) 但到处都是太久了。 因为据我所知,Searchlogic只是动态定义了named_scopes,我想在Card类上设置一个named_scope,如下所示: named_scope from_big_guys, { user_group_managers_salary_greater_than(100) } – 这是我在named_scope中使用那个漫长的Searchlogic方法的地方。 但是,再一次,语法是什么? 想不出来。 恢复 那么,named_scope嵌套(我不是指链接)实际上可能吗?

使用带有命名范围的ActiveRecord连接多个表

我喜欢为rails制作命名范围。 然而,我遇到了一些泡菜。 我非常习惯使用命名范围进行连接,如下所示: named_scope :foo, :joins => :bar, :conditions => “bar_attribute = ‘something'” 现在假装我有一个名为baz的表,它包含bar表中的外键。 我需要这样的东西: named_scope :foo, :joins => (:bar => :baz), :conditions => “bar.id = baz.bar_id AND baz_attribute = ‘something_else'” 这怎么可能? 谢谢

将current_scopes传递给搜索

我正在使用非常有用的has_scope gem。 我有一个通过在链接中传递范围创建的索引页面。 在那个索引页面上,我可以查询current_scopes。 我在该页面上有一个非常标准的搜索范围搜索表单,但使用它会返回没有任何范围的结果。 如何将current_scopes传递给搜索? 我尝试使用隐藏字段但无法使其工作。 我想如果我可以在一个链接中传递范围,我应该能够以一种forms传递它们但是在谷歌搜索后我不确定这是真的。 搜索表单 {:method => :post} do |f| %> 指数法 def index @user = User.find_by_username(params[:user_id]) @search = apply_scopes(@user.collections).search(params[:q]) @search.sorts = ‘created_at desc’ if @search.sorts.empty? @collections = @search.result.paginate(page: params[:page]) end