2017-10-18 5 views
1

質問タイトルで触れたように、これを機能させるには最良の方法を知りたいと思います。例(次のように非常に単純な1:)2つのレールを接続する方法5つのアプリケーションを一緒にするAPI(レール)とフロントエンド(レールも同様)

のは、私は例のシンプル

root 'main#index' 

と私は

def index 
    @date = Data.today 
end 
を持つindexアクション内部のための1つのコントローラと1つの作用を有するAPIを持っているとしましょう

それから私は別のフロントエンドのために働くのアプリは、私はそれをレンダリングするために、他のアプリにAPIからJSONとしてこの@dateを渡すことができますどのように


をレンダリングレール?

他のアプリで同じコントローラを使用する必要がありますか?

httpリクエストを送信して送信するにはどうすればよいですか?しかし、あなたが最も可能性が高いとするつもりだ

def index 
    @date = Date.today 
    respond_to do |format| 
    format.json @date 
    end 
end 

:このような単純な例事前

+0

私はあなたが '@date = Date.today'(あなたのバージョンはデータと言います)を意味すると思います。 – drosboro

答えて

2



おかげで、あなたはのような単純な何かを行うことができますより複雑なJSONレスポンスを扱うので、長い間、おそらくJbuilder gemまたはActiveModel Serializers(私が推奨するアプローチ)のようなものを使用したいと思うでしょう。

一方、フロントエンドはHTTP GETリクエストを行う必要があります。これを行うにはたくさんの方法(と宝石)がありますが、一般的なアプローチの1つは、組み込みのNet::HTTPクラスを使用することです。

require 'net/http' 

url = URI.parse('http://backend.dev/main/index') 
request = Net::HTTP::Get.new(url.to_s) 
response = Net::HTTP.start(url.host, url.port) do |http| 
    http.request(request) 
end 

raise response.body.inspect 

状況によっては、Active Resource gemを使用することをお勧めします。この宝石を使用すると、データベースではなくREST APIによってバックアップされたモデルを作成できます。あなたのAPIのアプリが特定のモデルのための基本的な作成、読み取り更新-破壊行為を提供する場合たとえば、次のURLで(のはWidgetそれを呼びましょう):

GET http://backend.dev/widget  # listing of widgets 
GET http://backend.dev/widget/1  # Read for widget id: 1 
POST http://backend.dev/widget  # Create new widget 
UPDATE http://backend.dev/widget/1 # Update widget id: 1 
DELETE http://backend.dev/widget/1 # Destroy widget id: 1 

その後、フロントエンドアプリであなたはANを宣言することができこのようなアクティブリソース:

class Widget < ActiveResource::Base 
    self.site = "http://backend.dev" 
end 

APIのこれらすべてのメソッドに自動的にアクセスし、通常のアクティブレコードモデルとよく似た動作をします。そうすれば、基本的にフロントエンドアプリケーションを「通常の」レールアプリケーションのように設計できますが、ActiveRecordの代わりにActiveResourceベースのモデルを使用します。

しかし、最近では、RailsでAPIを構築し、クライアント側のJavascriptでフロントエンドを構築し、JQueryやAngularなどを使用してリクエストを作成することが一般的になることに注意してくださいAPI。 APIとフロントエンドを分割することで何が得られるのか分かりません。なぜなら、魅力的な理由がなければ、APIとフロントエンドの両方を扱う1つのRailsアプリをビルドするだけで、 Rails API + Angular(または類似の)フロントエンドを構築することができます。

+0

これは、すべてのロジックを処理するAPIを作成したいと思っていて、Angularで作成された本当の良いフロントエンドを持っていたいと思っています。今は角度を快適に使うことができないので、それを分割し、フロントエンドとしての私の現在の経験と一致するので、フロントエンドとしてレールを使用する、これはテストフロントエンドのようなものではなく、実際のものではない、私は私のアプリをモノリシックにしたくないので、後でもう一度、もう一つの質問は、あなたが書いたこのコードをどこに置くべきですか?私はレールでいくつかの経験があるかもしれないが、この部分ではない。 –

+0

さて、この場合、ActiveResource gemを使用することをお勧めします。これは、基本的に、データベースではなくAPIによってサポートされるモデル(通常のような)を構築することを可能にします。そうすれば、フロントエンドのアプリは、通常のレールアプリのように構成されます。私はそれについて私の答えにセクションを追加しました - しかし、Active Resource readmeを慎重に見たいと思うでしょう。 – drosboro

+0

これはまさに私が探していたものです。少なくとも、ここでは深刻な問題を解決しました。試してみましたが、うまくいきました。ドキュメントを読む必要があり、エントリをインデックスに登録し、dbに新しいエントリを追加しました。それは更新と削除のために同じように行くはずです、あなたの助けを大変ありがとう:) –

関連する問題