Ruby on rails RubyonRails没有模型-如果数据CRUD是由WebServicesAPI执行的

Ruby on rails RubyonRails没有模型-如果数据CRUD是由WebServicesAPI执行的,ruby-on-rails,ruby,model-view-controller,design-patterns,Ruby On Rails,Ruby,Model View Controller,Design Patterns,我一直在考虑用rails开发一个新的应用程序(可能没有模型?)。我的意思是;后端将使用任何其他语言编写,并提供RESTful API,Rails应用程序将使用这些API 由于后端API将负责所有数据CRUD操作,rails应用程序将无法直接访问数据库。那么rails模型在这样的体系结构中就没有用处了 我也可以直接从控制器对API进行curl调用,但我希望在胖模型的同时保持控制器的瘦 或者,可以在模型中进行API curl调用,其行为类似于对该模型中的数据库执行数据CRUD 在上述任何一种情况下,

我一直在考虑用rails开发一个新的应用程序(可能没有模型?)。我的意思是;后端将使用任何其他语言编写,并提供RESTful API,Rails应用程序将使用这些API

由于后端API将负责所有数据CRUD操作,rails应用程序将无法直接访问数据库。那么rails模型在这样的体系结构中就没有用处了

我也可以直接从控制器对API进行curl调用,但我希望在胖模型的同时保持控制器的瘦

或者,可以在模型中进行API curl调用,其行为类似于对该模型中的数据库执行数据CRUD

在上述任何一种情况下,我都无法从许多rails特性或gem(比如friendly_id)中获益,这些特性或gem可以在活动记录/ORM上工作

我真的很困惑我该走哪条路?最佳实践是什么?您可以推荐什么架构?我绝对希望后端完全解耦,只提供RESTful API

提前谢谢。

看一看

你最终会得到模型,但大多数只会占用一行

假设您的api服务有一个url,如:它会显示一个产品列表。在将使用此数据的rails应用程序中,创建一个继承自
ActiveResource
产品
模型。首先,为activeresource设置api url

class ActiveResource::Base
  self.site = "http://api.fart.com"
end
接下来,定义一个产品类

class Product < ActiveResource::Base; end
它应该击中“http://api.fart.com/products.json“把好东西还给我

显然,这是一个很快设计好的例子,但我最近将其用于类似的情况,效果非常好

///////////////

有关基本概念,请参见

///////////////

根据您在github上提出的问题和请求,我理解您现在想要做什么
ActiveResource
没有
where
方法-但是,
find
方法有一个支持参数散列的选项参数

带有查询参数的Rails控制器

def index
  @products = Product.find :all, params: { country: "Brazil", price: 500 }
end
这将影响我们在api.fart.com/products.json?country=brazi&price=500的Sinatra路线

# Assume we are using ActiveRecord/DataMapper or the like
get "/products.json" do
  @products = Product.where country: params[:country], price: params[:price].to_i
  json products: @products
end
看一看

你最终会得到模型,但大多数只会占用一行

假设您的api服务有一个url,如:它会显示一个产品列表。在将使用此数据的rails应用程序中,创建一个继承自
ActiveResource
产品
模型。首先,为activeresource设置api url

class ActiveResource::Base
  self.site = "http://api.fart.com"
end
接下来,定义一个产品类

class Product < ActiveResource::Base; end
它应该击中“http://api.fart.com/products.json“把好东西还给我

显然,这是一个很快设计好的例子,但我最近将其用于类似的情况,效果非常好

///////////////

有关基本概念,请参见

///////////////

根据您在github上提出的问题和请求,我理解您现在想要做什么
ActiveResource
没有
where
方法-但是,
find
方法有一个支持参数散列的选项参数

带有查询参数的Rails控制器

def index
  @products = Product.find :all, params: { country: "Brazil", price: 500 }
end
这将影响我们在api.fart.com/products.json?country=brazi&price=500的Sinatra路线

# Assume we are using ActiveRecord/DataMapper or the like
get "/products.json" do
  @products = Product.where country: params[:country], price: params[:price].to_i
  json products: @products
end

太棒了,这正是我想要的。我唯一关心的是对slug使用友好的\u id。在这样的实现中有什么方法可以实现它吗?还假设我有一个RESTAPI url,如GET-so,在这种情况下,我的产品类会是什么样子?同样在controller中,我将如何调用这样的url?@JVK,我正在为您创建一个快速示例应用程序。过一会儿我会发到github。简言之,friendly_id似乎仅用于ActiveRecord,但可以轻松复制。@JVK请参阅底部的示例应用程序链接。我得到了slug部分。谢谢:)。但我最初的问题仍然没有得到回答。假设我有一个RESTAPI url,比如GET-so,在这种情况下,我的产品类在rails中(不是在sinatra应用程序中)会是什么样子?我还了解到,activeresource过去是rails的一部分,但由于一些问题,它现在已经从rails中删除了。那么继续使用它明智吗?太棒了,这正是我想要的。我唯一关心的是对slug使用友好的\u id。在这样的实现中有什么方法可以实现它吗?还假设我有一个RESTAPI url,如GET-so,在这种情况下,我的产品类会是什么样子?同样在controller中,我将如何调用这样的url?@JVK,我正在为您创建一个快速示例应用程序。过一会儿我会发到github。简言之,friendly_id似乎仅用于ActiveRecord,但可以轻松复制。@JVK请参阅底部的示例应用程序链接。我得到了slug部分。谢谢:)。但我最初的问题仍然没有得到回答。假设我有一个RESTAPI url,比如GET-so,在这种情况下,我的产品类在rails中(不是在sinatra应用程序中)会是什么样子?我还了解到,activeresource过去是rails的一部分,但由于一些问题,它现在已经从rails中删除了。那么继续使用它是否明智呢?