活动资源轨未获取数据

问题描述 投票:0回答:1

这是活跃的。rb

class Active < ActiveResource::Base
    self.site = "http://localhost:3002/api/v1/users" # **When i run this it is not fetching data**

    self.site = Net::HTTP.get(URI.parse("http://localhost:3002/api/v1/users")) # **When i run this i can see the data in console. Will get error Bad URI**

end

welcome_controller.rb

 def index
    @active = Active.all
  end

我无法从正在使用的活动资源中获取数据。请告诉我 谢谢你

ruby-on-rails ruby-on-rails-3 ruby-on-rails-5 ruby-on-rails-6 activeresource
1个回答
0
投票

我怀疑 ActiveResource 没有发出您期望的请求。您可以通过在 Rails 控制台中运行以下命令来获得一些清晰的信息:

Active.collection_path
Active.element_path

对于前者,您将看到

"/api/v1/users/actives.json"
,因为 activeresource 期望类 Active 是您的资源的名称。

您可以通过覆盖两个 ActiveResource 方法来控制生成的 URI 并删除资源规范(即 .json)

class Active < ActiveResource::Base class << self def element_path(id, prefix_options = {}, query_options = nil) prefix_options, query_options = split_options(prefix_options) if query_options.nil? "#{prefix(prefix_options)}#{id}#{query_string(query_options)}" end def collection_path(prefix_options = {}, query_options = nil) prefix_options, query_options = split_options(prefix_options) if query_options.nil? "#{prefix(prefix_options)}#{query_string(query_options)}" end end self.site = "http://localhost:3002/" self.prefix = "/api/v1/users" end
这将为您提供 

/api/v1/users

 的收集路径

也许更干净的选择是使用

self.element_name = "users"

文档 表明“如果您已经拥有与所需 RESTful 资源同名的现有模型”

您还可以使用

self.include_format_in_path = false

 删除格式 (.json),如 
此处提到

所以你可以通过使用来获得相同的效果:

class Active < ActiveResource::Base self.include_format_in_path = false self.site = "http://localhost:3002/" self.prefix = "/api/v1/" self.element_name = "users" end
顺便说一句,我想链接到这个答案,其中有一些非常有用的

关于自定义 ActiveResource 的注释,无需求助于猴子补丁。

此外,您还可以覆盖记录器,以便查看请求的详细信息。旋转

rails c

 并添加 
ActiveResource::Base.logger = ActiveRecord::Base.logger
 现在您可以运行 
Active.all
 并查看活动资源获取的详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.