我是Ruby的新手。我正在建立一个加密新闻网站。我想使用使用cryptocompare API的gem cryptocompare(https://github.com/alexanderdavidpan/cryptocompare),但我迷路了。
我需要帮助。
先谢谢了。
文档使用类似模块的功能,例如:
gem屏幕截图
我的控制器是这样的:
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没有字符串的隐式转换 进入整数
答案 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。