Ruby on rails 为什么逻辑在我的rails应用程序中不起作用?

Ruby on rails 为什么逻辑在我的rails应用程序中不起作用?,ruby-on-rails,Ruby On Rails,在我的应用程序导航栏中,我有以下代码: apps/views/layout/application.html.erb: 当用户注册时,他们将被引导到一个页面,选择是否继续作为雇主或学生,然后他们将被引导到一个页面,如果他们选择学生,则填写用户信息;如果他们选择雇主,则填写雇主信息。因此,在注册和填写其中一个表单之间,用户将没有“userinfo.id”或“employer.id”。这就是为什么我将它们重定向到“application\u studoremp\u path”。但是

在我的应用程序导航栏中,我有以下代码: apps/views/layout/application.html.erb:

当用户注册时,他们将被引导到一个页面,选择是否继续作为雇主或学生,然后他们将被引导到一个页面,如果他们选择学生,则填写用户信息;如果他们选择雇主,则填写雇主信息。因此,在注册和填写其中一个表单之间,用户将没有“userinfo.id”或“employer.id”。这就是为什么我将它们重定向到“application\u studoremp\u path”。但是应用程序抛出一个错误,表示找不到userinfo.id。显然,它没有被找到,因为它还没有被创建,这就是为什么会有一个“其他”部分。为什么逻辑不起作用info_complete是userinfo模型和雇主模型中的一个函数,用于检查信息是否已填写。如果用户已经存在(如果userinfo.id或employer.id已经存在),则一切正常。 这就是错误:

My userinfo.rb模型:

class Userinfo < ActiveRecord::Base
    belongs_to :user

    def info_complete?
        name? && email? && college? && gpa? && major?
    end
class Userinfo
问题似乎出在函数
info\u complete
中,它没有返回正确的值

我建议您对它进行一些测试,我想当您想引用模型中的变量时,应该使用“
”,如下所示:

def info_complete
  :name? && :age? 
end

您使用的方法不正确。 表示法
method(&:other)
method{i|i.other}
的缩写。这里发生的事情是prefix
&
与调用
对前缀为的对象执行proc
方法相同

现在,
userinfo
是一个getter,您可以向它传递一个块(当然),但它将被忽略,它只是一个getter

因此,您实际上只需检查
userinfo
是否为
nil
(或
false
)。您还可以判断,因为
(&:info\u complete)
甚至不会触发
NoMethodError
(而且应该,因为没有
info\u complete
,所以有
info\u complete?

您应该做的是只使用
userinfo.info\u complete?
如果您担心
user\u info
可能为零,请使用安全导航操作符执行此操作:
userinfo&.info\u complete?

进一步阅读:

嘿,佩德罗,我的模型是对的,因为它在其他地方也适用。它不是只有在用户登录后才起作用。我的问题是,既然infou complete在Userinfo或Employer上返回的都不是true,为什么代码不直接跳转到
  • 行?我认为它不是跳转,因为函数返回的是true(应该是false),这就是为什么。抛出错误显示rails正在尝试访问您的第一条语句。尝试更改userinfo和雇主声明的位置,将雇主放在首位。您尝试了我的第一个建议吗?使用“:”
    def info_complete
      :name? && :age? 
    end