Ruby on rails 在保存到rails之前比较字符串

Ruby on rails 在保存到rails之前比较字符串,ruby-on-rails,ruby,Ruby On Rails,Ruby,比较两个字符串表达式时“蝙蝠侠”!=“蝙蝠侠”无法创建对象, 但是当“蝙蝠侠”!=“robin”它成功创建了对象,发生了什么 class WebsiteLink < ActiveRecord::Base attr_accessible :external before_save :external? private def external? if "batman" != "batman" self.external = true el

比较两个字符串表达式时
“蝙蝠侠”!=“蝙蝠侠”
无法创建对象, 但是当“蝙蝠侠”!=“robin”它成功创建了对象,发生了什么

class WebsiteLink < ActiveRecord::Base
  attr_accessible :external

  before_save :external?


  private
  def external?
    if "batman" != "batman"
        self.external = true
    else
        self.external = false
    end
  end
end
classwebsitelink
如果过滤器之前的
返回
false
过滤器链停止。由于Ruby返回最后一个表达式的返回值(
self.external=
,在您的示例中),如果将
false
赋值给
self.external
,则不会执行
save

顺便说一句:
self.external=“蝙蝠侠”!=“蝙蝠侠”
比以下内容短得多:

if "batman" != "batman"
  self.external = true
else
  self.external = false
end
因此,如果您希望示例在
external
被指定为false的情况下仍然有效,则需要返回
true
explicit:

class WebsiteLink < ActiveRecord::Base
  attr_accessible :external

  before_save :determine_external

private
  def determine_external
    self.external = "batman" != "batman"
    true
  end
end
classwebsitelink