我有以下两个rails应用程序 . 一个是仅API,另一个是仅客户端(没有ORM) .

客户

localhost:2000

class Activity < ActiveResource::Base
 self.site = "http://localhost:3000/v1"

class ActivitiesController < ApplicationController
 def new
  @activity = Activity.new

<%= form_with(model: activity, local: true,
 url: "http://localhost:3000/v1/activities") do |form| %>

API

localhost:3000

class V1::ActivitiesController < ApplicationController #< ActionController::API
 def create
  @activity = Activity.new(activity_params)
  if @activity.save
   render :show, status: :created, location: [:v1, @activity]


Rails.application.config.middleware.insert_before 0, Rack::Cors do
 allow do
  origins "*"
  resource "*",
   headers: :any,
   # expose: %w(access-token expiry token-type uid client),
   methods: %i(get post put patch delete options head)

Update 我不太了解activeresource的概念 . 如果以下问题有意义的话 . 我可以这样使用rails API吗?或者我是否需要使用像typhoeus或savon这样的宝石或构建客户端库?

Questions

@activity已创建,但如何将其重定向到客户端路径而不是API路径?

尝试

  • 控制器是否处理?
    我试图设置位置:

  • 客户端网址,看看发生了什么 .

  • 使用request.original_url的动态路径

  • 使用request.query_attributes的额外参数

  • @ activity.callback在表单中传递属性 .

  • 我应该在rack-cors中定义动态路径吗?
    我试过:

  • 将origin定义为Client url

  • set expose:'client'将original_url检索到请求中

  • 我是否必须从客户端获取json?
    我不知道怎么......

  • 有轨道方式吗?

对于每次尝试,在客户端从localhost:2000提交后,它将重定向到localhost:3000处的API URL,并且永远不会返回到客户端 .

# Terminal for localhost:2000
Started GET "/activities/new" for 127.0.0.1 at 2018-01-03 23:38:24 +0100
Processing by ActivitiesController#new as HTML
...
Completed 200 OK in 24ms (Views: 22.4ms)

# Terminal for localhost:3000
Started POST "/v1/activities" for 127.0.0.1 at 2018-01-03 23:38:30 +0100
Processing by V1::ActivitiesController#create
...
Completed 201 Created in 126ms (Views: 73.3ms | ActiveRecord: 30.1ms)