我一直在寻找答案,并迅速杀死了3个小时。
我正在进行查询以从数据库中获取某些user_id。 (我这样做,所以我可以将结果保存在变量中,以便稍后在请求中使用)
sql = <<-SQL
SELECT users.id FROM users WHERE users.active = 't' and (users.created_by = #{user_id} OR users.id = #{user_id})
SQL
connection.execute(sql)
然后我有一个ID数组。所以我现在正在尝试迭代这些以查看特定ID是否在此数组中。
变量
raise @editable_users_list.to_yaml
结果
- !binary "aWQ=": 7
0: 7
- !binary "aWQ=": 8
0: 8
- !binary "aWQ=": 10
0: 10
我无望地尝试提取正确的结果
def can_edit_user?
if logged_in?
@editable_users_list.each do |user|
raise user.to_s
if user[:id].to_s == current_user[:id].to_s
return true
end
end
end
return false
end
上面的引发异常显示我的查询实际上是一个数组数组
{"id"=>7, 0=>7}
现在我一直在玩很多提及here的事情并且已经放弃了。
对此的任何和所有帮助...非常感谢。
答案 0 :(得分:0)
如果您只想获取用户的ID,请按以下方式执行:
@editable_users_list.map!(&:id)
并检查它:
return @editable_users_list.include? @editable_users_list
已编辑:
sql = <<-SQL
SELECT users.id FROM users WHERE users.active = 't' and (users.created_by = #{user_id} OR users.id = #{user_id})
SQL
@editable_users_list = connection.execute(sql)
@editable_users_list = @editable_users_list.map!(&:id)
答案 1 :(得分:0)
答案如下,这是因为SQL返回哈希散列。绝对不知道为什么。如果有人愿意告诉我上述问题,我和Vik都会回复这个问题,那将是巨大的:)。虽然我离题了。
它的工作原理是循环遍历这两个哈希值
def can_edit_user?(user_id)
if logged_in?
@editable_users_list.each do |user|
user.each do |id,value|
if value == user_id
return true
end
end
end
end
return false
end
我不确定这是不是应该这样做,或者这是否是“SQL连接”问题的解决方法。
无论如何,上面的代码它正在做我想做的事情,只是不那么理想(地狱,也许整个地段都不是最优的......)
再次欢呼Vik花时间,你对上面的想法仍然很棒。