【问题标题】:How do I use a check_box_tag for value that isn't a boolean?如何将 check_box_tag 用于非布尔值?
【发布时间】:2013-04-25 18:35:33
【问题描述】:

我的数据库中有一个名为 property_types 的字段,它有一个字符串值,值可以是“Condo”或“Single Family Home”或“Commercial”。我想在用户的搜索表单中显示每个属性类型,每个属性类型旁边都有一个复选框,以便用户可以选择哪些属性类型应该包含在他们的搜索结果中。

但是,如果 property_type 字段不是布尔值并且它有几个可能的值,我该如何使用只能有 true 或 false 值的 check_box_tag 来做到这一点?

编辑:

我将此复选框代码添加到搜索表单所在的属性/索引并显示搜索结果:

<%= check_box_tag(:condo, value = "1", checked = true) %>

在 properties_controller 我添加了这个:

@properties = @properties.where(:property_type => "Condo") if params[:condo].present?

当然它不起作用,因为我不知道我在做什么,但这是否正确?

【问题讨论】:

  • 可以是多个值/字符串吗?
  • 没有每个属性只有一个值,即“Condo”
  • 我的意思是,用户可以选择多个选项吗?
  • 啊,我明白了,是的,用户可以根据需要选择所有选项,但必须至少选择一个选项

标签: ruby-on-rails


【解决方案1】:

好吧,看看您的要求,我建议您将值保留在 truefalse,并在您的控制器上,当您持久保存对象时,您检查所有检查的可能性 (true) 和把你project_types 属性放在一起。

project_types += 'condo&' if params[:condo]
project_types += 'commercial&' if params[:commercial]
... 

当然,我在示例中添加的&amp; 仅用于演示,因为我不知道您将如何创建此字符串。

编辑:

好吧,也许你应该重构你的模型。我相信如果 project_types 属性不存在会更容易,相反,您有几个以字符串命名的布尔属性。然后你可以这样搜索:

@properties.where(:condo => params[:condo], :commercial => params[:commercial])

而且会更容易理解代码。

【讨论】:

  • 用更多信息编辑了答案。
猜你喜欢
  • 2019-04-07
  • 2017-03-07
  • 2023-03-11
  • 2019-01-06
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2020-10-12
相关资源
最近更新 更多