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