1

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 FETCH FIRST ROW ONLY

これをデバッグしようとした限り、問題は次のステートメントによって引き起こされます。

self.security_users_detail.attributes

なぜこれが起こるのか誰にも分かりますか?

編集:

詳細テーブル フィールドの下のスクリーン ショット:

ここに画像の説明を入力

ご覧のとおり、 usersテーブルを参照する列はありません。これが問題の原因である可能性があります。これは、関連付けを使用している場合、参照用に常に追加の列を作成する必要があることを意味しますか?

4

0 に答える 0