具有两个条件 rails 的正确语法 postgresql 查询,eula 验收/版本测试

correct syntax postgresql query with two conditions, rails, eula acceptance / version test

登录时,我正在尝试评估用户是否已接受我们当前的最终用户许可协议 (eula)。

contracts-controller.rb

def eula_version
  eula_version = "3" 
end

application_controller.rb 中,根据设计 gem 说明的 after_sign_in_path_for(resource) 方法

def after_sign_in_path_for(resource)
  if @user = current_user
    active_user = current_user.contracts.select("user_id")
    if Contract.where(:user_id == active_user_id).where(eula_version: "3" )
      user_home_path
    else
      user_terms_path
    end
...

当用户接受我们的最终用户许可协议时,将建立一个新记录。它在接受表单(视图)中的隐藏字段中用 eula 版本号标记:

f.hidden_field :eula_version, :value => '3' %>

如果我在 rails 控制台中测试 (1) Contract.where(:user_id == active_user_id),我会得到用户的记录,这里 eula_version 1 和 2。如果我测试 (2) Contract..where(eula_version: "3" ),我得到一条空记录:#<ActiveRecord::Relation []>

因此,用户已经接受了 eula 版本 1 和 2,但没有接受版本 3。但是,如果我再次登录,我将转到 user_home_path,这意味着 Contract.where(:user_id == active_user_id).where(eula_version: "3" ) 不是失败并将用户推送到 else 语句和 user_terms_path.

我试过变体,例如:

Contract.where((:user_id == active_user_id) && (eula_version: "3" ))  

Contract.where((:user_id == active_user_id) && (eula_version: "3" )) == true

Contract.where((:user_id == active_user_id) && (eula_version: "3" )).exists?

我显然不知道如何评估两个必须为真的条件。此外,如果有测试 eula 接受度的标准方法,例如特定的 gem,我将不胜感激。谢谢。感谢您的帮助。

你好像在兜圈子。这行得通吗?

if current_user.contracts.find_by(eula_version: 3)