首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不保存在显示中的布尔值

不保存在显示中的布尔值
EN

Stack Overflow用户
提问于 2018-04-03 11:27:07
回答 1查看 354关注 0票数 0

我有一个类公司,它的布尔属性为female_founder。这家公司要么有female_founder (真),要么没有(假)。

我已经创建了一个搜索过滤器,使用ransack创业板来询问一家公司是否是女性创建的。当我查询'true‘搜索时,枚举值保存并显示得很好,但是当我搜索'false’值时,显示会重置为我给它的提示值。

为什么会这样呢?我怎么才能修好它呢?我希望显示器显示我所选择的值。

模式

代码语言:javascript
复制
create_table "companies", force: :cascade do |t|
 ...
 t.boolean  "female_founder"
 ...
end 

Company.rb

代码语言:javascript
复制
class Company < ApplicationRecord
 enum female_founders: {
  'Yes' => 1,
  'No' => 0
 }
end

Search.html.erb

代码语言:javascript
复制
<%= f.label :female_founder_eq, 'Female Founder' %>
<%= f.select :female_founder_eq, Company.female_founders.to_a, {prompt: "Any"} %>

搜索“是”以返回正确的female_founder显示

搜索“否”,female_founder将搜索显示重置为提示值。搜索查询正确,只是显示不正确。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 20:27:26

下面是Rails在rails/actionview/lib/action_view/helpers/tags/base.rb:中决定是否添加提示符的位置

代码语言:javascript
复制
      def add_options(option_tags, options, value = nil)
        if options[:include_blank]
          option_tags = tag_builder.content_tag_string("option", options[:include_blank].kind_of?(String) ? options[:include_blank] : nil, value: "") + "\n" + option_tags
        end
        if value.blank? && options[:prompt]
          option_tags = tag_builder.content_tag_string("option", prompt_text(options[:prompt]), value: "") + "\n" + option_tags
        end
        option_tags
      end

当Rails构建其select标记时,它将使用blank?来确定是否包含提示符,这无法区分它是nil还是false;因为@company.female_founderfalse,而falseblank?,所以它将假定没有给出任何值并添加提示。(就他们而言,这可能是故意的,也可能不是故意的。)

现在,这里的value是标记的选定值,如果定义了:selected选项,它可以被覆盖,所以如果手动将:selected设置为0的No值,那么它应该会像预期的那样抑制提示符(因为0不是blank?)。这里有一个似乎适用于我的常规表格:

代码语言:javascript
复制
# 1 if true - show 'Yes', 0 if false - show 'No', nil if nil - show 'Any'
<%= f.select :female_founder, Company.female_founders.to_a, { prompt: "Any", selected: { true => 1, false => 0 }[@company.female_founder] } %>

对于洗劫犯来说,它需要看起来像这样:

代码语言:javascript
复制
<%= f.select :female_founder_eq, Company.female_founders.to_a, {prompt: "Any", selected: { true => 1, false => 0 }[@q.base[:female_founder_eq].try(:value)] } %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49628916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档