sha*_*evy 105 ruby-on-rails ruby-on-rails-4
class RelatedList < ActiveRecord::Base
extend Enumerize
enumerize :list_type, in: %w(groups projects)
belongs_to :content
has_many :contents, :order => :position
end
Run Code Online (Sandbox Code Playgroud)
我在我的rails应用程序中有这个模型,当我尝试在控制台中创建记录时会抛出警告.
DEPRECATION警告:不推荐使用RelatedList.has_many:contents声明中的以下选项:: order.请改用示波器块.例如,以下内容:has_many:spam_comments,conditions:{spam:true},class_name:'Comment'应重写如下:has_many:spam_comments, - > {where spam:true},class_name:'Comment'.(来自/Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7)
看起来Rails 4有新的:用于模型的命令语法,但我似乎无法在Rails指南中找到文档.
vee*_*vee 246
在Rails 4中,:order已被弃用,需要替换为lambda范围块,如您在问题中发布的警告中所示.另一点需要注意的是,此范围块需要在任何其他关联选项之前传递,例如dependent: :destroy 等.
尝试一下:
has_many :contents, -> { order(:position) }
Run Code Online (Sandbox Code Playgroud)
要指定顺序方向,即无论是asc或desc作为@约书亚-科迪和@wsprujit建议,使用:
has_many :contents, -> { order 'position desc' }
Run Code Online (Sandbox Code Playgroud)
或者,使用哈希样式:
has_many :contents, -> { order(position: :desc) }
Run Code Online (Sandbox Code Playgroud)
有关活动记录范围的has_many进一步参考.
小智 35
我花了一段时间来弄清楚如何做订单和包含,我最终发现你链接范围语句,
has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing"
Run Code Online (Sandbox Code Playgroud)
Wyl*_*udd 22
只是想我添加,如果你有任何选项哈希参数,他们必须追逐lambda,像这样:
has_many :things, -> { order :stuff }, dependent: :destroy
Run Code Online (Sandbox Code Playgroud)
我花了一分钟时间自己解决这个问题 - 希望它可以帮助其他人来解决这个问题.
| 归档时间: |
|
| 查看次数: |
43951 次 |
| 最近记录: |