Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/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 针对Rails 4的不推荐警告具有许多顺序 class-RelatedList:位置 结束_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 针对Rails 4的不推荐警告具有许多顺序 class-RelatedList:位置 结束

Ruby on rails 针对Rails 4的不推荐警告具有许多顺序 class-RelatedList:位置 结束,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我的rails应用程序中有这个模型,当我试图在控制台中创建记录时,它会发出警告 弃用警告:您的 RelatedList.has\u许多:内容声明已弃用::order。 请改用范围块。例如,以下内容:有很多 :spam_注释,条件:{spam:true},类名:'Comment' 应重写如下:has_many:spam_comments,->{ 其中spam:true},类名:'Comment' . (从at/Users/shivam/Code/auroville/avorg/app/models

我的rails应用程序中有这个模型,当我试图在控制台中创建记录时,它会发出警告

弃用警告:您的 RelatedList.has\u许多:内容声明已弃用::order。 请改用范围块。例如,以下内容:有很多 :spam_注释,条件:{spam:true},类名:'Comment' 应重写如下:has_many:spam_comments,->{ 其中spam:true},类名:'Comment' . (从at/Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7调用)


Rails 4似乎有新的:order语法用于模型中,但我似乎在Rails指南中找不到文档。

在Rails 4中,
:order已被弃用,需要用lambda作用域块替换,如您在问题中发布的警告所示。需要注意的另一点是,这个范围块需要在任何其他关联选项(如
dependent::destroy
等)之前传递

尝试一下:

class RelatedList < ActiveRecord::Base
  extend Enumerize

  enumerize :list_type, in: %w(groups projects)

  belongs_to :content
  has_many :contents, :order => :position

end
要指定订单方向,即@joshua coady和@wsprujit建议的
asc
desc
,请使用:

has_many :contents, -> { order(:position) } # Order by :asc by default
或者,使用哈希样式:

has_many :contents, -> { order 'position desc' }

关于的进一步参考。

我花了一段时间才弄明白如何进行排序和包含,我最终发现您的语句

has_many :contents, -> { order(position: :desc) }

或者,您可以在模型上放置
order
子句,例如:

has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing"
变成

has_many :options, order: 'name' # In class Answer

PS:我得到了
ArgumentError:错误的参数数(1代表0)
当执行
有很多:事情,->{}
时,我想我应该补充一点,如果你有任何选项散列参数,它们必须跟在lambda后面,如下所示:

has_many :options # In class Answer

default_scope { order 'name' } # In class Option

我自己花了一分钟来解决这个问题-希望它能帮助其他有同样问题的人解决这个问题。

这对我使用Rails 4&MongoDB很有效。

has_many :things, -> { order :stuff }, dependent: :destroy

作品棒极了!在指南或文档中,我在哪里可以找到此类信息?我找不到。谢谢。如果您有多个不推荐的选项,比如说
order
include
,该怎么办?这:
{order(:position),include(:track)}
在逗号上抛出错误。对于排序asc/desc,请使用
->{order(name::asc)}
如果出于某种原因,您只想对集合进行多次排序,您还可以执行总体上更有效的
list.contents.order('position desc')
,而且,不要使用默认范围,因为模型侵入性(在投票答案中,列表知道一个内容字段,这里控制器知道它)。如果你已经习惯了这样做,你可以在这个神奇的方法中加入更多的逻辑。将来很难重写它。对象上可能存在的“through”关联也是如此-
有很多:items,->{order'name'},through::suppliers
这正是我的问题。试图找出如何通过父属性对多个关系排序。我不知道你可以这样做,然后订购。谢谢
has_many :discounts, order: :min_amount.asc