Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 查找:哈希的所有条件_Ruby On Rails - Fatal编程技术网

Ruby on rails 查找:哈希的所有条件

Ruby on rails 查找:哈希的所有条件,ruby-on-rails,Ruby On Rails,在我的数据库中有一个表'audits',其中包含一个名为'changes'的字段,该字段以散列的形式存储数据 我希望检索具有以下条件的所有审核: - auditable_type = 'Expression' - action = 'destroy' - changes = :EXP_SUBMISSION_FK =>'9999992642' #note that this field stores hash values @expression_history_deleted = Aud

在我的数据库中有一个表'audits',其中包含一个名为'changes'的字段,该字段以散列的形式存储数据

我希望检索具有以下条件的所有审核:

- auditable_type = 'Expression'
- action = 'destroy'
- changes = :EXP_SUBMISSION_FK =>'9999992642' #note that this field stores hash values

@expression_history_deleted = Audit.find(:all, :conditions => ["auditable_type =? AND action = ? AND changes = ?",'Expression', 'destroy' , { :EXP_SUBMISSION_FK =>'9999992642'} ])
上面的代码不返回任何内容

如果我删除条件中的“更改”,使其如下所示,我将得到一个条目列表:

@expression_history_deleted = Audit.find(:all, :conditions => ["auditable_type =? AND action = ?",'Expression', 'destroy'])



   <% @expression_history_deleted.each do |test| %>
    <%= test.changes['EXP_SUBMISSION_FK'] %> ---displays the value
    <% end %>
我正在使用“acts_as_audited”,它将所有更改以哈希格式存储在“audits”表中

****

我假设您正在使用ActiveRecord中的serialize函数

不幸的是,我认为在SQL级别上搜索它并不容易。显然可以提取所有记录并用Ruby处理搜索,但这并不理想


我建议您将需要搜索的任何内容从序列化列移到自己的列中。

如果您使用的是ActiveRecord序列化宏,那么您可以转储列
更改的包含内容
和单独的构造,如“audible\u type:Expression”。尝试对该列执行一系列全文搜索,工作就完成了。
但更可取的方法是将数据提取到真实的数据库级列中

,感谢您的建议。我正在使用“acts_as_audited”,它以哈希格式将所有更改存储在“audits”表中。在这种情况下,我认为我需要检索记录并使用Rubyth执行搜索,这似乎是最简单的解决方案。另一种方法是按照Vladson的建议,尝试进行一些复杂的全文搜索,但由于我们处理的是实际数据,而不仅仅是文本,这会让我产生偏执。
****