Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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对子对象进行排序并显示_Ruby On Rails_Sorting_Associations - Fatal编程技术网

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
,因为子对象的类型不同,并且它们是单独获取的(separate
has_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对象类型选择正确的分部。

谢谢!这看起来让我走上了正轨。我真的很感谢你的帮助。谢谢!这看起来让我走上了正轨。我真的很感谢您的帮助。我获得了“不带块调用默认范围的支持已删除”。请参阅我获得的“不带块调用默认范围的支持已删除”。请参阅