外部URL ID为Rails id Route

时间:2015-05-16 04:59:18

标签: ruby-on-rails ruby json model-view-controller routes

我还没有真正进入任何框架的路由,路由已经很复杂了。我需要一些帮助。

我从iTunes json文件中获取一些数据。我有我视图中列出的所有热门歌曲。我想要做的是设置路线,当用户点击其中一首热门歌曲时,它会将它们带到show_song页面(而不是重定向到iTunes歌曲页面)。但我想使用JSON文件中的ID。在展示页面中,我想使用它:

@song.title
@song.price
@song.image
etc.

如何将歌曲ID设置为iTunes json id ??

下面是我的索引中的内容:

url = 'https://itunes.apple.com/us/rss/topsongs/limit=25/json'
@resp = Net::HTTP.get_response(URI.parse(url))
@data = JSON.parse(@resp.body)['feed']

我想在显示页面上进行link_to并显示歌曲信息。

=link_to image_tag entry['im:image'][2], (grab the id from here)

由于

1 个答案:

答案 0 :(得分:1)

这是我要做的。可以使用您提供的URL检索所有热门歌曲。棘手的部分是知道如何渲染只有一首歌

经过一番搜索,我发现Itunes提供了一种available here的API。如您所见,您可以使用ID https://itunes.apple.com/lookup?id=XXXXX等网址检索任何内容。

所以诀窍是从第一次调用中检索每个条目的ID并将其用作参数(我没有对我的示例进行安全测试)。

在名为home&的页面控制器(例如)中创建两个静态视图。 song

在你的config / routes.rb中,你将拥有:

match  '/song/:id' => 'pages#song', via: [:get], as: :song
root 'pages#home'

我的控制器看起来像这样:

class PagesController < ApplicationController
  def home
    url = 'https://itunes.apple.com/us/rss/topsongs/limit=25/json'
    @resp = Net::HTTP.get_response(URI.parse(url))
    @data = JSON.parse(@resp.body)['feed']
  end

  def song
    url = "https://itunes.apple.com/lookup?id=#{params[:id]}"
    @resp = Net::HTTP.get_response(URI.parse(url))
    @song = JSON.parse(@resp.body)['results'][0]
  end
end

我对每个动作的看法如下:

# Pages#home
<% @data['entry'].each do |song| %>
    First image : <%= song['im:image'][0]['label'] %>
    <br />
    Name : <%= song['im:collection']['im:name']['label'] %>
    <br />
    Link : <%= song['im:collection']['link']['attributes']['href'] %>
    <br />
    Price : <%= song['im:price']['label'] %>
    <br />
    ID : <%= song['id']['attributes']['im:id'] %>
    <br />
    <%= link_to "This song", song_path(song['id']['attributes']['im:id']) %>
    <hr>
<% end %>

# Pages#song
First image : <%= @song['artworkUrl100'] %>
<br />
Name : <%= @song['trackName'] %>
<br />
Link : <%= @song['trackViewUrl'] %>
<br />
Price : <%= @song['trackPrice'] %>

这只是一个工作示例,您可以稍微清理一下代码并添加一些安全检查。