如何检查关系模型的字段是否为空?

时间:2013-06-27 09:33:01

标签: ruby-on-rails-3 model relationship has-one

我有一个用户和用户详细信息模型位于 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

有谁知道为什么会这样?

编辑:

详细信息表字段下面的屏幕截图:

enter image description here

正如您所看到的,没有列引用用户表。可能导致问题,这是否意味着如果我使用任何关联,我总是应该为参考创建额外的列?

0 个答案:

没有答案