【发布时间】:2017-05-10 03:35:49
【问题描述】:
我正在为访问者构建一个看似简单的网站,以获取所选数据片段的状态更新。数据来自外部 API。它的要点是:访问者看到一个数据名称列表,单击一个,然后被重定向到具有状态更新的部分,无论是 True 还是 False。
我的 index 方法效果很好,并且可以完美地遍历数据名称。我相信我的路由(使用friendly_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
查看:
<% @response.each do |data| %>
<ul>
<li>
<%= link_to data['name'].upcase, name_path(@name) %>
</li>
</ul>
<% end %>
路线:
Rails.application.routes.draw do
root 'data#index'
get '/:name' => 'data#show', as: "name"
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 结果中实际捕获“名称”键作为 show 方法的参数。我尝试创建一个 data_params 方法来包含它,但它不起作用。我尝试在 show 中隐式调用 find 方法的参数(如上),但无济于事。我什至尝试在 params 方法中调用新的 api scrape 并尝试将结果解析为该方法,但什么也没有。
我猜这是我没有看到的一些非常简单的错误(我的 link_to 实际上指向正确的方向吗?我的 api 调用和 JSON 解析是否正确完成 [是的,我知道我应该创建一个单独的方法或api调用的助手,但到目前为止对我来说还没有解决——我一直在破坏应用程序]?这个链接实际上还应该从索引方法调用吗?),或者更多的东西我的深度。
关于从这里去哪里有什么想法吗?
【问题讨论】:
标签: ruby-on-rails json ruby httparty