无法访问文件中的自定义帮助函数 - Sinatra

时间:2014-08-20 05:19:10

标签: ruby sinatra

我在'app.rb'文件中有这个帮助器,用于获取当前用户对象。

helpers do
    def get_current_user(column, value)
        user = User.where(column => value).first
        return user
    end
end

get '/' do
    user = get_current_user(:id, params[:id])
end

这就是我在irb中所做的:

irb(main):001:0> require './app'
=> true
irb(main):007:0> user = get_current_user(:id, 2)
NoMethodError: undefined method `get_current_user' for main:Object
from (irb):7
from /usr/bin/irb:12:in `<main>'

我不明白为什么我无法从irb访问辅助方法。我应该明确包括帮助者或什么?如果是这样,为什么?因为我把它们放在同一个文件下,在同一个类下。

1 个答案:

答案 0 :(得分:0)

get_current_users通过helpers方法进行元编程,成为App的实例方法。所以,如果app.rb看起来像这样:

require 'sinatra/base'

class App < Sinatra::Base
  helpers do
    def get_current_user
      puts "here!"
    end
  end
end

...然后从irb你可以在这样的App实例上调用get_current_user

>> require './app'
>> App.new!.get_current_user  
here!  
=> nil
>>

(如果您想知道为什么new!而不是new喜欢大多数理智的红宝石代码,请阅读this answer。)