Ruby on rails 在为Ruby on Rails网站实施Instagram Gem时出现NoMethodError
我刚刚完成了一个月的Rails教程,这是我创建的网站:。现在我正试图将Instagram提要拉到主页上,但我在本地主机的Pins#index中得到了NoMethodErrorRuby 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
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)
- 我很可能犯了另一个错误,当我试图删除它后,马坦建议,所以它没有工作,然后(见上面的评论)
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中声明
时,我试图将数据呈现到我的pins视图(views/pins/index.html.erb)中。但是,我没有在pins_controller.rb中声明@instagram
@instagram
- 所以我从instagram_controller.rb复制了
,并用索引方法将其粘贴到我的pins_controller.rb中;像这样:@instagram=instagram.user_recent_media(“264208635”)
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帐户相关的代码。我看到帖子的标题、用户名、过滤信息等。