Ruby on rails 在为Ruby on Rails网站实施Instagram Gem时出现NoMethodError

Ruby on rails 在为Ruby on Rails网站实施Instagram Gem时出现NoMethodError,ruby-on-rails,instagram,instagram-api,Ruby On Rails,Instagram,Instagram Api,我刚刚完成了一个月的Rails教程,这是我创建的网站:。现在我正试图将Instagram提要拉到主页上,但我在本地主机的Pins#index中得到了NoMethodError undefined method `each' for nil:NilClass <div> <% @instagram.each do |instagram| %> <%= image_tag instagram.images.first.last.url %> &l

我刚刚完成了一个月的Rails教程,这是我创建的网站:。现在我正试图将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单独放在另一个控制器中,但仍然出现相同的错误:

class InstagramController < ApplicationController
  def index
    @instagram = Instagram.user_recent_media("264208635")
    respond_with(@instagram)
  end
end
class InstagramController
我应该如何在代码中声明@instagram

更新1:我的视图代码(index.html.erb):


编辑 删去
在朋友的帮助下,我意识到自己错在哪里,以及如何纠正命名错误

这个答案有两个部分:
1) 将Instagram代码添加到PIN控制器中
2) 对Instagram数据使用单独的控制器

请注意,此答案专门针对为期一个月的Rails教程,可能适用于也可能不适用于每个web应用程序

1) 将Instagram代码添加到PIN控制器中

  • Mattan Griffel对
    用(@pins)响应
    部分的看法是正确的。
    
    response\u with(@pins)
    导致我的控制器操作跳过了本节的其余部分 这个角色。所以当我改变代码的顺序时,它起作用了
  • 我很可能犯了另一个错误,当我试图删除它后,马坦建议,所以它没有工作,然后(见上面的评论)
my 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
  def index
    @instagram = Instagram.user_recent_media("264208635")
    @pins = Pin.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 5)
    respond_with(@pins)
  end
  def index
    @instagram = Instagram.user_recent_media("264208635")
    @pins = Pin.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 5)
    respond_with(@pins)
  end
2) 对Instagram数据使用单独的控制器

  • 即使使用单独的控制器,我也会遇到相同的命名错误,因为当我在instagram_controller.rb中声明
    @instagram
    时,我试图将数据呈现到我的pins视图(views/pins/index.html.erb)中。但是,我没有在pins_controller.rb中声明
    @instagram
  • 所以我从instagram_controller.rb复制了
    @instagram=instagram.user_recent_media(“264208635”)
    ,并用索引方法将其粘贴到我的pins_controller.rb中;像这样:
my 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
  def index
    @instagram = Instagram.user_recent_media("264208635")
    @pins = Pin.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 5)
    respond_with(@pins)
  end
  def index
    @instagram = Instagram.user_recent_media("264208635")
    @pins = Pin.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 5)
    respond_with(@pins)
  end

类似地,
respond\u with(@pins)
会导致我的控制器操作跳过其余部分,因此
@instagram=instagram。必须在
respond\u with(@pins)
之前而不是之后添加用户最近的媒体(“264208635”)
。然后,它成功了。

在您的例子中,您似乎正在渲染不属于动作的视图,即
索引
。您看到的视图是什么?运行
Instagram。在rails控制台中,用户最近的媒体(“264208635”)
可能返回
为零
为我的视图更新了代码(index.html.erb). 你介意解释一下你的第一句话吗?对不起,我一个月前才开始使用Rails,所以我对它还是非常业余的。@RajarshiDas,我已经这么做了,我收到了一整段与用户instagram帐户相关的代码。我看到帖子的标题、用户名、过滤信息等。