如何在Rails中的ruby中使用gem cryptocompare?

时间:2018-07-25 01:45:57

标签: ruby-on-rails ruby

我是Ruby的新手。我正在建立一个加密新闻网站。我想使用使用cryptocompare API的gem cryptocompare(https://github.com/alexanderdavidpan/cryptocompare),但我迷路了。

我需要帮助。

先谢谢了。

文档使用类似模块的功能,例如:

gem屏幕截图

enter image description here

我的控制器是这样的:

class PostsController < ApplicationController

    before_action :authenticate_user!
    before_action :find_post, only: [:show, :edit, :update, :destroy, :like]
#   before_action :owned_post, only: [:edit, :update, :destroy]    

    def index

        @posts = Post.of_followed_users(current_user.following).order('created_at DESC').page params[:page]
        @posts = Post.all.order('created_at DESC').page params[:page]
        @coinlists = Cryptocompare::CoinList.all

        @my_coins = []
        @coinlists.each {|coin| @my_coins.push(coin) }

    end

我的观点是这样的:

<% @my_coins.each {|coin| puts coin } %>

问题是什么也没发生;不知道该怎么办才能解决此问题。当我使用其他迭代时,它会引发错误:

方法

def index

@coinlists = Cryptocompare::CoinList.all      
@my_coins = []

        @coinlists.each do |coin|
            coin["Name"]
            coin["Symbol"]
            @my_coins.push(coin)
        end
end

在我看来

<% @my_coins.each_with_index do |coin, index| %>

         <%= coin["Name"] %>
         <%= coin["Symbol"] %>

<% end %>

请参见下面的错误

  PostsController#index中的

TypeError没有字符串的隐式转换   进入整数

2 个答案:

答案 0 :(得分:0)

您在@coinlists中存储了错误的数据。根据gem的文档,实际上应该存储的是"Data"键。

在您的控制器操作中,应该是这样的:

def index
  ...
  @coinlists = Cryptocompare::CoinList.all["Data"]
end

您认为:

<% @coinlists.values.each do |coin| %>
  <%= coin["Name"] %>
  <%= coin["Symbol"] %>
<% end %>

您应该详细了解hashes在Rails中的工作方式。祝你好运!

答案 1 :(得分:0)

此外,您可能更喜欢Hash#each_value -它避免了@coinlists.values.each { |coin| ... }引起的不必要的数组分配。

您可能会参考这些通常有用的performance optimisations