【问题标题】:Rails Console queries working; but the same request in the app produces an errorRails 控制台查询工作;但应用程序中的相同请求会产生错误
【发布时间】:2016-08-08 03:25:25
【问题描述】:

我试图弄清楚如何在 Rails 4 中制作一个简单的应用程序。

我有用户、个人资料和身份的模型。这些关联是:

用户

has_many :identities, dependent: :destroy

has_one :profile, dependent: :destroy

简介

belongs_to :user

身份

belongs_to :user

在控制台我可以写:

p = Profile.last p.user.identities.map(&:provider).include?('facebook')

它正确地产生 :false 的结果

当我尝试在配置文件辅助方法中编写以下内容时:

if @profile.user.identities.map(&:provider).include?('facebook')

我收到一条错误消息:

undefined method `user' for nil:NilClass

我在应用中有一个登录用户。我不明白为什么我可以在控制台中成功地请求这个,但是当我在应用程序中尝试时出现错误。

谁能看出哪里出了问题?

【问题讨论】:

  • 你的联想是什么样的?
  • @profile 来自哪里?
  • 你可以使用默认的调试 gem byebug 来检查@profile吗?
  • @jdgray - 嗨 - 我在上面添加了我的关联。在控制台中一切正常 - 所以我只是期待它在应用程序中工作
  • @Milind - 在控制台中它来自 p = Profile.last。在应用程序中,它来自配置文件显示页面。

标签: ruby-on-rails methods call


【解决方案1】:

您的@profilenil。这就是发生错误的原因。

我假设您正在从 show.html.erb 文件中调用辅助方法。在show.html.erb 文件中调用辅助方法,如:

<%= helper_method_name(@profile) %> # make sure your @profile is a `Profile` object

profiles_helper.rb

def helper_method_name(profile)
   if profile.user.identities.map(&:provider).include?('facebook')
       // do something
   end 
end

【讨论】:

  • 但我的#profile 不是零。我可以在显示页面的下一行写@profile.created_at 并显示时间。我使用 # 而不是 'a' 符号,因为这些 cmets 不允许多次使用它
  • @Mei,不知何故你的helper 无法接收@profile 变量。
  • 你是对的。我试图在另一个视图中渲染部分。那是造成问题的原因。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多