在登录时,我正在尝试评估用户是否已接受我们当前的最终用户许可协议(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接受度,例如特定的宝石,我很欣赏这个参考。谢谢。感谢您的帮助。
答案 0 :(得分:0)
你好像是围成一圈。这会有用吗?
tm.search_for_regex_match