<% 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/