正确的语法postgresql查询有两个条件,rails,eula acceptance / version test

时间:2015-06-04 20:40:35

标签: ruby-on-rails ruby postgresql devise authorization

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

contracts-controller.rb

def eula_version
  eula_version = "3" 
end

application_controller.rb中,每个设计宝石指令都有一个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时,会建立新记录。它通过接受表格(视图)中的隐藏字段用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" )不是&#39 ; t失败并将用户推送到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接受度,例如特定的宝石,我很欣赏这个参考。谢谢。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你好像是围成一圈。这会有用吗?

tm.search_for_regex_match