Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails-解析JSON结果的Show方法_Ruby On Rails_Json_Ruby_Httparty - Fatal编程技术网

Ruby on rails RubyonRails-解析JSON结果的Show方法

Ruby on rails RubyonRails-解析JSON结果的Show方法,ruby-on-rails,json,ruby,httparty,Ruby On Rails,Json,Ruby,Httparty,我正在为访问者建立一个看似简单的网站,以获取所选数据块的状态更新。数据来自外部API。其要点是:访问者看到一个数据名列表,单击其中一个,然后重定向到状态更新为True或False的分部 我的索引方法工作得很好,可以完美地遍历数据名。我相信我的路由(使用友好的_id gem)应该可以正常工作。但是,我不知道如何正确设置show方法 以下是我迄今为止的代码: 控制器: class DataController < ApplicationController include HTTParty

我正在为访问者建立一个看似简单的网站,以获取所选数据块的状态更新。数据来自外部API。其要点是:访问者看到一个数据名列表,单击其中一个,然后重定向到状态更新为True或False的分部

我的索引方法工作得很好,可以完美地遍历数据名。我相信我的路由(使用友好的_id gem)应该可以正常工作。但是,我不知道如何正确设置show方法

以下是我迄今为止的代码:

控制器:

class DataController < ApplicationController
  include HTTParty
  attr_accessor :name, :status

  def index
    @response = HTTParty.get("api_url").parsed_response
     respond_to do |format|
      format.json { render :json => JSON.parse(@result, :include => { :data => { :only => [:name, :status]}}) }
      format.html { render "index.html.erb" }
     end
   end


  def show
    @response = HTTParty.get('api_url').parsed_response
    respond_to do |format|
      format.json { render :json => JSON.parse(@result, :include => { :data => { :only => [:name, :status]}}) }
      format.html { render "show.html.erb" }
    end
    @name = @response.find(params[:name])
  end
end
所有这些加在一起会导致以下错误:

ActionController::UrlGenerationError in Data#index
Showing /app/views/layouts/_header.html.erb where line #11 raised:

No route matches {:action=>"show", :controller=>"data", :name=>nil} missing required keys: [:name]
我试图实现的是能够将每个迭代链接路由为“root/{data name}”,从JSON结果中提取{data name}作为参数,然后呈现一个包含状态更新信息的显示页面。显然,我不知道如何从解析后的JSON结果中捕获“name”键作为show方法的参数。我曾尝试创建一个数据参数方法来包含它,但它不起作用。我尝试在show中的find方法上隐式调用param(如上所述),但没有成功。我甚至尝试在params方法中调用一个新的api scrape,并尝试将结果解析为params方法,但什么都没有

我猜这可能是我没有看到的一个非常简单的错误(我的链接指向正确的方向吗?我的api调用和JSON解析是否正确完成了[是的,我知道我应该为api调用创建一个单独的方法或帮助器,但到目前为止我还没有找到答案--我一直在破坏应用程序]?这个链接真的应该从index方法调用吗?),或者其他一些更超出我深度的东西

有没有关于从这里走到哪里的想法?

在这个视图中:

<% @response.each do |data| %>
  <ul>
    <li>
      <%= link_to data['name'].upcase, name_path(@name) %>
    </li>
  </ul>
<% end %>

您正在使用
@name
,但在
索引
控制器方法中从未实际为其赋值。结果-它被传递给
name\u path
函数,值为
nil
。这会引发错误,因为路由定义需要
名称

我认为您需要类似于
name\u path(data['name'])
或类似的东西。

在此视图中:

<% @response.each do |data| %>
  <ul>
    <li>
      <%= link_to data['name'].upcase, name_path(@name) %>
    </li>
  </ul>
<% end %>

您正在使用
@name
,但在
索引
控制器方法中从未实际为其赋值。结果-它被传递给
name\u path
函数,值为
nil
。这会引发错误,因为路由定义需要
名称


我想您需要类似于
name\u path(data['name'])
或类似的东西。

非常有效!谢谢老实说,我差点就被那个代码绊倒了,但它并没有完全实现。我相信我得到的最接近的是name_path(@data['name']),它抛出了相同的错误。这是有道理的——我发现Rails中生成路径的神奇方法相当混乱。我花了很多时间才适应它们。这非常有效!谢谢老实说,我差点就被那个代码绊倒了,但它并没有完全实现。我相信我得到的最接近的是name_path(@data['name']),它抛出了相同的错误。这是有道理的——我发现Rails中生成路径的神奇方法相当混乱。我花了很多时间才适应它们。
<% @response.each do |data| %>
  <ul>
    <li>
      <%= link_to data['name'].upcase, name_path(@name) %>
    </li>
  </ul>
<% end %>