Лучший способ отправить информацию из клиентского сценария Ruby в приложение Rails? - PullRequest
1 голос
/ 25 ноября 2010

Я хотел бы создать записи в базе данных дорожек (как в музыке) в приложении Rails, отправив информацию о дорожках из сценария Ruby на стороне клиента. Мне нужно только создавать и уничтожать дорожкиИсходя из скрипта, мне не нужен веб-интерфейс, и я не беспокоюсь об аутентификации / авторизации в данный момент. Может, кто-нибудь подскажет мне (а) как правильно настроить приложение Rails (используя Rails 2.3.8) и (б) как отправить данные из сценария Ruby?

Вот подход, который я использовал до сих пор:

Я создал модель трека и контроллер треков.Вот код контроллера трека:

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 для объекта отслеживания?

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 25 ноября 2010

Я не вижу особых проблем с вашим API или с тем, как вы собираетесь писать его с помощью HTTP-клиента.Однако, чтобы он соответствовал стандарту RESTful, ваш вызов create должен возвращать объект в формате XML или JSON.Вы действительно можете просто вызвать to_xml или to_json для объекта @track.Эти функции принимают опции для дальнейшего управления выходом.Например, если вы хотите исключить часть данных из вашего API, вы можете передать опцию :except.Для получения дополнительной информации см. Связанные документы.

Что касается вашего скрипта, я лично предпочитаю HTTParty , а не ActiveResource - очень просто, легко понять и не требует, чтобы вы точно подходили к вашему APIк ActiveResource способ ведения дел. Примеры - хорошее место для начала, или посмотрите на 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 как хеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...