【问题标题】:External URL id as Rails id Route [closed]外部 URL id 作为 Rails id Route [关闭]
【发布时间】:2015-07-28 02:47:08
【问题描述】:

我还没有真正接触过任何框架的路由,而且路由已经很复杂了。我需要一些帮助。

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

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

如何将 Song 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 image_tag entry['im:image'][2], (grab the id from here)

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    在您的 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'] %>
    

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

    【讨论】:

    • 谢谢!!像魅力一样工作。但是你能向我解释一下“匹配”对这条路线有什么作用吗?也许我可以对幕后发生的事情有更多的了解。啊哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多