Rails Extensions语法错误:意外的keyword_do_block

时间:2014-12-17 19:07:10

标签: ruby-on-rails

我花了太多时间本来应该是一个简单的解决方案。我的模型中有这个代码。

class Forum < ActiveRecord::Base
  validates :name, presence: true
  belongs_to :project
  has_many :topics

15 has_many :posts, -> {order "posts.created_at DESC" }, through: :topics, do
    def last
      @last_post ||= find(:first, include: :account)
    end
  end
37 end

当我尝试在下面运行此测试时,

test "should list only top level topics" do
  assert_models_equal [topics(:sticky), topics(:il8n), 
                       topics(:ponies), topics(:pdi)],  
                       forums(:rails).topics
end

我得到了这个恼人的错误

forum.rb:15: syntax error, unexpected keyword_do_block (SyntaxError)
forum.rb:37: syntax error, unexpected keyword_end, expecting end-of-input

我在上面标出了发生错误的行。如果我注释掉有许多关联的&amp; extensions部分,则测试继续并且错误输出。我究竟做错了什么? 我已经检查了下面显示的has_many关联的Rails API语法。

has_many(name, scope = nil, options = {}, &extension)

语法顺序正确,为什么会返回语法错误?帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

do

之前不需要逗号
has_many :posts, -> {order "posts.created_at DESC" }, { through: :topics } do

看一下这个链接

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