我想通过从客户端Ruby脚本发送跟踪数据信息,在Rails应用程序中的Track(如音乐)数据库中创建条目。我只需要创建和销毁来自脚本的曲目,我不需要任何Web界面,而且我现在不担心身份验证/授权。 有人可以告诉我(a)如何正确设置Rails应用程序(使用Rails 2.3.8)和(b)如何从Ruby脚本发送数据?
这是我到目前为止采用的方法:
我创建了一个Track模型和Tracks控制器。这是Track控制器代码:
class TracksController < ApplicationController
def create
@track = Track.new(params[:track])
respond_to do |format|
if track.save
format.any(:xml, :json) { head :ok }
else
format.xml { render :xml => @track.errors, :status => :unprocessable_entity}
format.json { render :json => @track.errors, :status => :unprocessable_entity}
end
end
end
def destroy
@track = Track.find(params[:id])
@track.destroy
respond_to do |format|
format.any(:xml, :json) { head :ok }
end
end
end
我已按如下方式设置路线:
map.resources :tracks, :only => [:create, :destroy]
为了从Ruby脚本发送信息,我尝试了(1)使用ActiveResource和(2)使用net / http和xml格式的轨道信息。对于后者,我不知道如何用net / http发布帖子请求,而且我不清楚如何正确格式化xml。例如,我可以在轨道对象上使用to_xml吗?
提前感谢您的帮助。
答案 0 :(得分:0)
我没有看到您的API有任何特殊问题,或者您是如何使用HTTP客户端编写脚本的。但是,为了使其适合RESTful标准,您的create
调用应该将对象作为XML或JSON返回。实际上,您只需在@track
对象上调用to_xml或to_json即可。这些函数接受进一步控制输出的选项。例如,如果您希望从API中排除某些数据,则可以传递:except
选项。有关详细信息,请参阅相关文档。
至于你的脚本,我个人更喜欢HTTParty而非ActiveResource - 非常简单,易于理解,并且不要求你完全符合ActiveResource的服务方式。 The examples是一个很好的起点,或者查看Chargify gem以查看更长的示例。 HTTParty只需要一个Hash并将其转换为XML或JSON。您不需要在脚本中拥有Track对象(除非您真的想要)。你的脚本会是这样的:
require 'httparty'
class TrackPoster
include HTTParty
base_uri 'http://hostname.com'
def self.create_track(artist, song)
post('/tracks', :body => {
:track => { :artist => artist, :song => song }})
end
end
TrackPoster.create_track('The Beatles', 'Let It Be')
此调用将返回解析后的XML / JSON作为哈希值。