Ruby on rails Rails对子对象进行排序并显示
关于我最后一个问题:Ruby on rails Rails对子对象进行排序并显示,ruby-on-rails,sorting,associations,Ruby On Rails,Sorting,Associations,关于我最后一个问题: 是否可以按创建日期对Rails中的多个独立子对象进行排序,然后列出它们?使用上一个示例,我有一份包含两个不同子对象的简历,我想获取它们,然后根据创建日期对它们进行排序,然后用它来显示它们 您可以在父模型上添加访问器方法: class Parent < ActiveRecord::Base def sorted_children children.scoped( :order => 'created_at DESC' ) # or, in ra
是否可以按创建日期对Rails中的多个独立子对象进行排序,然后列出它们?使用上一个示例,我有一份包含两个不同子对象的简历,我想获取它们,然后根据创建日期对它们进行排序,然后用它来显示它们 您可以在父模型上添加访问器方法:
class Parent < ActiveRecord::Base
def sorted_children
children.scoped( :order => 'created_at DESC' )
# or, in rails3:
# children.order('created_at DESC')
end
end
类父级'created_at DESC')
#或者,在rails3中:
#children.order('created_at DESC')
结束
结束
如果子模型的自然顺序是日期字段,并且您希望在任何地方都这样做,则只需在其上设置默认范围:
class Child < ActiveRecord::Base
default_scope :order => 'created_at DESC'
end
class-Child'created\u at DESC'
结束
您可以在父模型上添加访问者方法:
class Parent < ActiveRecord::Base
def sorted_children
children.scoped( :order => 'created_at DESC' )
# or, in rails3:
# children.order('created_at DESC')
end
end
类父级'created_at DESC')
#或者,在rails3中:
#children.order('created_at DESC')
结束
结束
如果子模型的自然顺序是日期字段,并且您希望在任何地方都这样做,则只需在其上设置默认范围:
class Child < ActiveRecord::Base
default_scope :order => 'created_at DESC'
end
class-Child'created\u at DESC'
结束
由于子对象的类型不同,并且它们是单独获取的(单独的有许多
),因此您必须在Ruby中进行排序:
sorted_childs=(@resume.child1_sections.all + @resume.child2_sections.all).sort(&:created_at)
否则,您将需要在父级中引入具有公共列的表继承。然后可以为所有具有
:order
的子对象创建另一个has_many
,因为子对象的类型不同,并且它们是单独获取的(separatehas_many
),您必须在Ruby中进行排序:
sorted_childs=(@resume.child1_sections.all + @resume.child2_sections.all).sort(&:created_at)
否则,您将需要在父级中引入具有公共列的表继承。然后,可以为所有具有
:order
的子对象创建另一个has_many
:我假设您有两个(或更多)独立的子对象模型,因此您的父对象模型如下所示:
class Parent < ActiveRecord::Base
has_many :dogs
has_many :cats
end
并将其放入Parent
模型中。然后您可以在控制器中使用它:
@parent = Parent.find(params[:id])
@children = @parent.children
现在,我们将尝试在视图中显示它们。我假设您已经为每个模型\u cat.html.erb
和\u dog.html.erb
创建了两个部分。鉴于:
<h1>Children list:</h1>
<% @parent.children.each do |child| %>
<%= render child %>
<% end %>
子列表:
它应该自动找到应该使用哪个部分,但只有遵循Rails的方式,它才能使用。如果您想以不同的方式命名分部,或者将其存储在不同的目录中,那么您必须编写自己的方法,根据od对象的类型选择正确的分部。我假设您有两个(或更多)独立的子对象模型,因此您的父
模型如下所示:
class Parent < ActiveRecord::Base
has_many :dogs
has_many :cats
end
并将其放入Parent
模型中。然后您可以在控制器中使用它:
@parent = Parent.find(params[:id])
@children = @parent.children
现在,我们将尝试在视图中显示它们。我假设您已经为每个模型\u cat.html.erb
和\u dog.html.erb
创建了两个部分。鉴于:
<h1>Children list:</h1>
<% @parent.children.each do |child| %>
<%= render child %>
<% end %>
子列表:
它应该自动找到应该使用哪个部分,但只有遵循Rails的方式,它才能使用。如果您想以不同的方式命名分部,或将其存储在不同的目录中,则必须编写自己的方法,根据od对象类型选择正确的分部。谢谢!这看起来让我走上了正轨。我真的很感谢你的帮助。谢谢!这看起来让我走上了正轨。我真的很感谢您的帮助。我获得了“不带块调用默认范围的支持已删除”。请参阅我获得的“不带块调用默认范围的支持已删除”。请参阅