2012-10-22 47 views
0

使用Rails 3.2。下面是我的控制器:在Rails控制器中使用define_method会产生语法错误

class ShopsController < ApplicationController 
    ... 

    class << self 
    Shop::SHOP_TYPES.each do |shop_type| 
     define_method "nearby_#{shop_type.pluralize}" 
     @nearby_type = "#{shop_type.pluralize}" 
     end 
    end 
    end 

... 
end 

class Shop < ActiveRecord::Base 
    SHOP_TYPES = %w(cafe restaurant) 
end 

但是,它给了我syntax error, unexpected keyword_end, expecting $end在最后end属于class ShopsController < ApplicationController。我试图保持代码干燥,以便我不必手动编码:

class ShopsController < ApplicationController 
    ... 

    def nearby_cafes 
    @nearby_type = "cafes" 
    end 

    def nearby_restaurants 
    @nearby_type = "restaurants" 
    end 

... 
end 

我做了什么错了?谢谢。

回答

5

define_method预计块,你缺少你在哪里打电话define_method

+0

我傻就行了do!需要睡眠! – Victor

+0

我还是比较新的(关于回答问题):为什么这个简单的答案对于一个简单的问题得到了更多的赞扬,而不是对更复杂问题的更详细的回答?只是巧合,还是我错过了什么? – doesterr

+0

我想有些人(包括我)错过了“做”。在官方的API码头中,并没有说我们实际上可以将它用作块。但是这里的第一个注释http://apidock.com/ruby/Module/define_method#762-define-method-with-parameters表明我们确实可以。所以你的赞扬实际上拯救了很多错过了'做'的人。再次感谢。 – Victor

相关问题