我正在使用 ruby gem whois 测试一个小型 whois API,由于 whois 响应的格式非常有趣,有时我被要求不要使用 ActiveRecord 来保存响应。
简而言之,它的工作原理如下:
- 用户从视图中以表单形式输入域名(操作“查找”=创建请求)
- 控制器捕获参数,然后通过实例化请求对象 [包含 whois 响应] 发送到模型(非 activerecord)
- 模型使用 whois gem 并将 whois 响应发送回控制器
- 控制器以不同的格式(html/json/xml)发送响应,但只有 html 获取对象。
这是我的控制器“请求”的操作“查找”的代码:
def lookup
domain = params[:domain]
@request = Request.new.search(domain)
respond_to do |format|
if @request != nil
format.html
format.json { render :json => @request}
format.xml {render :xml => @request}
else
format.html { render :new }
format.json { render json: @request.errors, status: :unprocessable_entity }
end
end
显然,我遇到了困难,因为我没有使用 ActiveRecord,并且由于 RoR 正在等待一个他不断吐出 nilClass 异常。
所以当我继续localhost:8080/requests/lookup
一切都显示正常,@request 包含我想要的所有数据。
但是否localhost:8080/requests/lookup.json
or localhost:8080/requests/lookup.xml
什么都没有显示,如果我尝试在构建器(Jbuilder/XMLBuilder)中给出指令,它会抛出 nilClass 异常,证明变量范围不是那么全局......
不,我不认为放入变量会话是一个好主意:我只会将它用于单个查询。
如果需要,我很乐意提供更多我的代码,如果它可以帮助您理解我的问题。我知道 AR 是一条出路,但尽管如此,我很好奇如何在这种情况下绕过它。
谢谢 !
即使您不使用 ActiveRecord,也可以使用 ActiveModel。 Rails 4 让一切变得非常简单。您还可以添加ActiveModel::序列化 http://api.rubyonrails.org/classes/ActiveModel/Serialization.html它允许您序列化对象.to_json
and .to_xml
class WhoisLookup
include ActiveModel::Model
include ActiveModel::Serializers::JSON
include ActiveModel::Serializers::Xml
attr_accessor :search_term # ...
# you can use all the ActiveModel goodies
validates :search_term, presence: true, length: {in:2..255}
end
ActiveModel::Serialization 将允许您使用:
format.json { render :json => @result } # calls @result.to_json
附言。不要使用@request
对于变量命名(也许@result?)你一定会遇到问题和困惑ActionDispatch::Request
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)