尝试订购时,has_many上的SyntaxError与块关联

时间:2014-08-08 01:00:13

标签: ruby-on-rails-4 has-many

在Ruby on Rails 4中,让我们说父母有很多孩子。然后我想reference only the persisted records in an active record association,并按照链接接受的答案。这很好用:

class Parent < ActiveRecord::Base
  has_many :children, dependent: :destroy do
    def persisted
      collect { |a| a if a.persisted? }
    end
  end

现在,我想订购相关记录:

has_many :children, dependent: :destroy, -> { order 'id asc' } do

但这会引发错误:

ParentsController中的SyntaxError #index

... trunk / app / models / parent.rb:3:语法错误,意外的keyword_do_block,expecting =&gt; ... trunk / app / models / parent.rb:49:语法错误,意外的keyword_end,期待输入结束

然而,这确实有效:

has_many :children, -> { order 'id asc' } do

我甚至找不到关于如何在关联上使用do_block的文档。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

我的方法有两个问题:

  1. 参数的顺序。在rails 4中,范围在选项之前。
  2. 应该包装选项哈希,因为它不再是最后一个参数。
  3. 所以,这段代码确实有效:

    has_many :children, -> { order 'id asc' }, { dependent: :destroy } do
      def persisted
        collect { |a| a if a.persisted? }
      end
    end
    

    参考文献:

    https://www.ruby-forum.com/topic/5436931

    http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many#461-User-a-block-to-extend-your-associations