外部 URL id 作为 Rails id 路由
External URL id as Rails id Route
我还没有真正了解任何框架的路由,路由已经很复杂了。我需要一些帮助。
我正在从 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)
谢谢
这是我会做的。使用您提供的 URL 可以检索所有热门歌曲。棘手的部分是知道如何渲染 只有一首歌。
经过一番搜索,我发现Itunes提供了一种API,即available here。如您所见,您可以使用 URL(例如 https://itunes.apple.com/lookup?id=XXXXX
.
)检索任何内容的 ID
所以诀窍是从您的第一次调用中检索每个条目的 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'] %>
这只是一个工作示例,您可以稍微清理一下代码并添加一些安全检查。
我还没有真正了解任何框架的路由,路由已经很复杂了。我需要一些帮助。
我正在从 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)
谢谢
这是我会做的。使用您提供的 URL 可以检索所有热门歌曲。棘手的部分是知道如何渲染 只有一首歌。
经过一番搜索,我发现Itunes提供了一种API,即available here。如您所见,您可以使用 URL(例如 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'] %>
这只是一个工作示例,您可以稍微清理一下代码并添加一些安全检查。