【问题标题】:Rails sorting associated recordsRails 对关联记录进行排序
【发布时间】:2018-04-12 05:41:57
【问题描述】:

使用 Rails 3.0.10 和 Ruby 1.9.2。

我有一个 Book 模型,它有很多页。

class Book < ActiveRecord::Base
  has_many :pages

  # is this right?
  def pages
    Page.order('page_number asc').find_all_by_book_id(:id)
  end
end

class Page < ActiveRecord::Base
  belongs_to :book
end

当我检索一本书的页面时,我总是希望它们按页码排序。处理此问题的正确方法是什么,以便调用 book.pages 将按顺序返回所有页面?

在编辑本书时,我还会显示可以编辑的每一页的内容。如果我使用嵌套属性,假设我之前的问题得到解决,这是否会以正确的顺序返回页面?

<%= form_for [@book, @pages] do |f| %>
  <%= f.fields_for :pages do |page| %>
    do something
  <% end %>
<% end %>

谢谢

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我相信您实际上可以直接在关联声明中指定默认顺序:

    class Book < ActiveRecord::Base
        has_many :pages, :order => "page_number asc"
    end
    
    class Page < ActiveRecord::Base
      belongs_to :book
    end
    

    这样你就不用自己指定Book#pages方法了,默认还是按page_number asc排序的。

    【讨论】:

      【解决方案2】:

      对于较新版本的 Rails,语法已更改:

      class Book < ActiveRecord::Base
          has_many :pages, -> { order "page_number asc" }
      end
      
      class Page < ActiveRecord::Base
        belongs_to :book
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-06
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 2011-04-21
        • 1970-01-01
        相关资源
        最近更新 更多