我是rails(和ruby)的新手,并且在访问不同的命名空间时遇到了很多麻烦。具体来说,我无法从控制器类中访问flickraw gem的命名空间:
class ImageSourcesController < ApplicationController
def show
list = flickr.photos.getRecent
...
end
end
调用此方法,我收到回复:
undefined local variable or method `flickr' for #<ImageSourcesController:0x00000005006658>
我正在使用bundler,我认为确保gem需要gemfile中所有gem的方法。
编辑:我愚蠢,事实证明我只需要重置服务器!
答案 0 :(得分:1)
为flickraw创建初始化器是个好主意:
# config/initializers/flickraw.rb
FlickRaw.api_key= ENV['FLICKR_API_KEY']
FlickRaw.shared_secret= ENV['FLICKR_API_SECRET']
如果您要创建一个开源应用程序,您可能希望使用ENV变量来存储您的API密钥和共享密钥。 dotenv gem是一个非常好的工具。
您似乎也对Ruby中的命名空间感到困惑。 Ruby实际上并没有像PHP这样具有特殊关键字和命名空间访问器的方式使用命名空间。
Ruby拥有充当命名空间(分组类,常量等)和特征的模块。 Foo::Bar.create()
是访问&#34;命名空间&#34;上的类方法的示例。类。
module Foo
class Bar
def create
end
end
end
你的flickraw示例只是访问嵌套属性(它确实与命名空间有关):
flickr.photos.getRecent
您获取对象flickr
(当我们需要flickraw时会创建flickraw)并向其发送消息photos
,该消息会返回FlickRaw::Flickr::Photos
个实例。
然后,我们会将消息getRecent
发送给flickr.photos