我正在使用我的rails应用程序的SQLite3数据库,并且在尝试解决此问题时非常令人沮丧。
我希望以不同的方式填充复选框,具体取决于表单(_form.html.erb)是在更新中还是在创建时呈现:
<% if @foo.new_record? %>
<% query = "association_id == nil" %>
<% else %>
<% query = "" %>
<% end %>
然后我将查询字符串传递给我的复选框
collection_check_boxes(:host, :association_ids, Association.where(query), :id, :name)
这应该做的是给我所有的关联作为更新的复选框,只有那些在创建时不具有association_id的关联。
如果我用:association_id=>nil
替换查询,我将获得所需的创建结果。
如果我用Association.all
替换查询,我会得到更新结果。
我可以在检查new_record时手动复制我的所有代码吗?但是我的代码已经相当漫长而复杂,而且会让它变得更加复杂。所以我想把一个字符串(查询)传递给我的where调用。这是我遇到麻烦的地方。
当我查看rails控制台并进行直接SQL查询时,我注意到没有association_id的返回文件将显示为association_id: nil
。所以我尝试匹配nil,但这给了我一个未知的专栏:nil&#34;来自SQL的错误。当我尝试匹配SQL NULL时,它找不到任何东西。
如何将nil属性存储在数据库中,如何使用字符串查询它?
答案 0 :(得分:3)
你应该做
<% query = "association_id is null" %>
Association.where(:association_id => nil)
将在内部转换为如下所示的查询
select * from associations where association_id is null