Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 用于订购的默认\u范围ActiveRecord 4.1块用法_Ruby On Rails_Ruby On Rails 4_Rails Activerecord - Fatal编程技术网

Ruby on rails 用于订购的默认\u范围ActiveRecord 4.1块用法

Ruby on rails 用于订购的默认\u范围ActiveRecord 4.1块用法,ruby-on-rails,ruby-on-rails-4,rails-activerecord,Ruby On Rails,Ruby On Rails 4,Rails Activerecord,我使用的是ActiveRecord 4.1,其中一些内容在上发生了更改,而我的整个部署都失败了,因为这一行: 默认范围顺序(“pos ASC”) 到目前为止,我已经把它注释掉了,但是您将如何以块形式编写此排序?还是有更好的方法在模型中对结果进行排序 模型如下所示: class Answer < ActiveRecord::Base self.table_name="THE_ANSWERS" self.primary_key="id" self.sequence_name = :

我使用的是ActiveRecord 4.1,其中一些内容在上发生了更改,而我的整个部署都失败了,因为这一行:

默认范围顺序(“pos ASC”)

到目前为止,我已经把它注释掉了,但是您将如何以块形式编写此排序?还是有更好的方法在模型中对结果进行排序

模型如下所示:

class Answer < ActiveRecord::Base
  self.table_name="THE_ANSWERS"
  self.primary_key="id"
  self.sequence_name = :autogenerated
  # -> default_scope order('pos ASC')

  belongs_to :question
end
scope :ordered, ->{ order(pos: :asc) }
default_scope { ordered }
class-Answer默认范围顺序(“pos ASC”)
属于:问题
结束

我假设可以编写
default\u scope{where order:'pos ASC'}

您可以像这样使用
default\u scope

class Answer < ActiveRecord::Base
  self.table_name="THE_ANSWERS"
  self.primary_key="id"
  self.sequence_name = :autogenerated
  # -> default_scope order('pos ASC')

  belongs_to :question
end
scope :ordered, ->{ order(pos: :asc) }
default_scope { ordered }
或直接:

default_scope { order(pos: :asc) } 

扩展Yoshiji先生的答案:

您可以直接将
默认\u范围定义为:

default_scope { order(:pos) } 
默认情况下,顺序始终为升序

Rails 4.1的
default\u scope
中的更改表明,
default\u scope
将与模型中在同一字段上定义的所有其他作用域合并

例如:

如果您的模型中有类似的内容:

class Answer < ActiveRecord::Base
  ##..
  default_scope { where pos: 1 } 
  scope :get_positions, ->(mypos) { where pos: mypos }
end

注意
default\u scope
在查询
get\u positions
scope时被合并,因为它们在相同的字段(即
pos
)上,这在以前的Rails版本中从未发生过。

Hmmm,
default\u scope
实际上被合并到Rails 3.2.13中的其他作用域中。我必须使用
Model.unscoped
跳过这个
default\u范围
我没有添加到同一字段中。让我更新我的答案。