具有两个条件 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)
登录时,我正在尝试评估用户是否已接受我们当前的最终用户许可协议 (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)