【发布时间】:2014-12-24 07:59:01
【问题描述】:
我刚刚完成了一个月的 Rails 教程,这是我建立的网站:https://warwicktri.herokuapp.com/。现在我正在尝试将 Instagram 提要拉到主页上,但在我的本地主机上的 Pins#index 中出现 NoMethodError。
undefined method `each' for nil:NilClass
<div>
<% @instagram.each do |instagram| %>
<%= image_tag instagram.images.first.last.url %>
<% end %>
</div>
我认为这意味着@instagram 没有正确声明,但我不知道我哪里出错了。
这是我的 pins_controller.rb 中的代码:
def index
@pins = Pin.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 5)
respond_with(@pins)
@instagram = Instagram.user_recent_media("264208635")
respond_with(@instagram)
end
我也尝试将@instagram 单独放在另一个控制器中,但我仍然得到同样的错误:
class InstagramController < ApplicationController
def index
@instagram = Instagram.user_recent_media("264208635")
respond_with(@instagram)
end
end
我应该如何在我的代码中声明@instagram?
更新 1:我的视图代码 (index.html.erb):
<div id="pins" class="transitions-enabled">
<% @pins.each do |pin| %>
<div class="box panel panel-default">
<%= link_to image_tag(pin.image.url(:medium)), pin %>
<div class="panel-body">
<p><%= pin.description %></p>
<p><strong><%= pin.user.name if pin.user %></strong></p>
<% if pin.user == current_user %>
<div class="actions">
<%= link_to edit_pin_path(pin) do %>
<span class="glyphicon glyphicon-edit" aria-hidden="true"></span> Edit
<% end %>
<%= link_to pin, method: :delete, data: { confirm: 'Are you sure?' } do %>
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete
<% end %>
</div>
<% end %>
</div>
</div>
<% end %>
</div>
<div class="center">
<%= will_paginate @posts, renderer: BootstrapPagination::Rails %>
</div>
<div>
<% @instagram.each do |instagram| %>
<%= image_tag instagram.images.first.last.url %>
<% end %>
</div>
【问题讨论】:
-
看来您正在渲染不属于该操作的视图,在您的情况下是
index。 -
你有什么看法?
-
在rails控制台中运行
Instagram.user_recent_media("264208635")可能是返回nil -
@МалъСкрылевъ,我已经更新了我的视图的代码 (index.html.erb)。你介意解释你的第一个陈述吗?抱歉,我一个月前才开始使用 Rails,所以我还是很业余。
-
@RajarshiDas,我已经完成了,我收到了与用户的 Instagram 帐户相关的整个代码块。我看到了帖子的标题、用户名、过滤器信息等。
标签: ruby-on-rails instagram instagram-api