ruby-on-rails - Ruby on Rails if 语句不起作用,尽管变量具有 bool 值

标签 ruby-on-rails ruby-on-rails-5

      <% if @property.for_sale? %>
    <%= @property.price > 0 ? number_to_currency(@property.price, precision: 0) : "For Sale" %>
  <% else %>
     <%= @property.price > 0 ? number_to_currency(@property.price, precision: 0) : "For Rent" %> / month
  <% end %>

for_sale 变量设置为 false

Parameters: { "for_sale"=>"false", "id"=>"3"}

这是将其设置为 false 的代码:

<%= form.select :for_sale, options_for_select({ "Yes" => true, "No" => false }

因此应该运行 else 语句。但是,这并没有反射(reflect)在 View 方面。我在这里缺少什么?

编辑1

“for_sale”变量默认设置为 true。

t.boolean "for_sale", default: true

但是,当我使用上面显示的 options_for_select 代码将其更改为 false 时,它​​仍然保持为 true。

有什么线索吗?

编辑2

解决了! for_sale 变量未包含在 property_params 中

def property_params
  params.require(:property).permit(:name, :address, :price, :rooms, :bathrooms, :parking_spaces,:details, :photo, :photo_cache, :for_sale)
end

最佳答案

处理 'false' 是字符串或 false 的 bool 值的一种方法是对值进行类型转换。由于您使用的是 Rails,因此您可以:

ActiveModel::Type::Boolean.new.cast(@property.for_sale)

这将确保 'false'false 都评估为 false

关于ruby-on-rails - Ruby on Rails if 语句不起作用,尽管变量具有 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62633663/

相关文章:

ruby-on-rails - 为什么parameterize第一次执行的时候特别慢

ruby-on-rails - 如何避免 "preflight requests"?

ruby-on-rails - Rails 5 在本地渲染集实例变量

ruby-on-rails - Rails,如何指定在 Controller 的 JSON 响应中输出哪些字段?

jquery - 如何在 Rails 上启用 Turbolinks 的情况下通过 AJAX 正确渲染部分内容?

ruby-on-rails - 在 Sidekiq 作业结束前释放 ActiveRecord 连接

css - Twitter Bootstrap 类(网格、导航)不呈现

ruby-on-rails - 两种不同的布局,每种布局有一个样式表

ruby-on-rails - rails 5 : NoMethodError: undefined method `helper' for MyMailer

ruby - PatientsController#index 错误中的 Rails 5.2 ActionController::UnknownFormat