为了确定照片是否与指定的宽高比匹配,我使用了:

exif2 = EXIFR::JPEG.new(photo.queued_for_write[:medium].path)
self.featured = exif2.width == 1250 and exif2.height == 833

但是,如果宽度为1250但高度为任何值,则返回true。如果exif2.height不是833,在rails控制台中运行这个确切的命令将返回false。但是,将其更改为下面的if语句是有效的
if exif2.width == 1250 and exif2.height == 833
  self.featured = true
else
  self.featured = false
end

我不明白为什么,我正在努力学习rails,所以我认为理解它对我很有用。

最佳答案

运算符优先级,and甚至低于=
所以你的第一个表达式被计算为

( self.featured = exif2.width == 1250 ) and ( exif2.height == 833 )

你的条件是这样评估的
if ( exif2.width == 1250 ) and ( exif2.height == 833 )

. …表明你的不同答案,虽然令人困惑,但并不是因为任何不一致
尽可能使用&&而不是and

关于ruby-on-rails - 为什么在Rails模型中variable = true和false会导致true值,但在控制台中却没有,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15708658/

10-09 17:00