我有一个用户和用户详细信息模型位于 has-one < - > 属于的关系。最初,当用户注册(创建)时,他的详细信息不会被填充。
我想在用户登录时,如果他的详细信息未填充显示详细信息表单并“强制”他完成他的个人资料。
因此,在应用程序控制器中,我添加了以下代码:
before_filter :is_profile_complete
helper_method :current_user
private
def current_user
@current_user ||= SecurityUser.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
end
def is_profile_complete
if current_user
unless current_user.is_profile_completed
redirect_to security_users_detail_path
end
end
end
因此,通常,如果用户登录,则is_profile_complete方法将调用is_profile_complete模型方法,该方法看起来:
def is_profile_completed
is_completed = true
self.security_users_detail.attributes.each do |field_name, field_value|
if field_value.blank? || field_value.empty?
is_completed = false
break
end
end
is_completed
end
因此,我想检查是否有任何详细信息字段为空 - 如果是,则配置文件未完成。
不幸的是,上面的模型方法会产生以下错误:
ActiveRecord :: StatementInvalid at /
ActiveRecord :: JDBCError:DB2 SQL错误:SQLCODE = -206,SQLSTATE = 42703, SQLERRMC = SECURITY_USERS_DETAILS.SECURITY_USER_ID,DRIVER = 3.65.77: SELECT security_users_details。* FROM security_users_details WHERE security_users_details.security_user_id = 301仅限第一行
据我尝试调试此问题,问题是由以下声明引起的:
self.security_users_detail.attributes
有谁知道为什么会这样?
编辑:
在详细信息表字段下面的屏幕截图:
正如您所看到的,没有列引用用户表。可能导致问题,这是否意味着如果我使用任何关联,我总是应该为参考创建额外的列?