Ruby on rails 为什么逻辑在我的rails应用程序中不起作用?
在我的应用程序导航栏中,我有以下代码: apps/views/layout/application.html.erb: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”。但是
当用户注册时,他们将被引导到一个页面,选择是否继续作为雇主或学生,然后他们将被引导到一个页面,如果他们选择学生,则填写用户信息;如果他们选择雇主,则填写雇主信息。因此,在注册和填写其中一个表单之间,用户将没有“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