铁轨变了?方法总是错误的

2023-12-22

我正在尝试检查我的模型中复选框值是否已更改。如果改变了我想要我的方法set_ip_setting跑进去before_save but my x即使我更改值,变量也总是返回 false。为什么它总是返回错误?我不明白我做错了什么

before_save :set_ip_setting, if: :check_my_ip
def check_my_ip
    x = self.sip.my_ip_changed?
    is_ip = self.sip.my_ip
    if x == true && is_ip == true
     return false
   elsif x == false && is_ip == true
     return false
  elsif x == true
     return true
   end 
end
def set_ip_setting
    if self.sip.try(:my_ip) == true 
      sip.nat = "yes"
      sip.invite = "yes"
    end
  end

EDITED我通过使用得到了我想要的结果previous_changes方法,但我认为有一种更干净的方法,但这对我来说是有效的

  def check_my_ip
    x = self.sip.previous_changes[:my_ip]
    off_to_on = [false, true]
    on_to_off = [true, false]
    is_ip = self.sip.my_ip ? 1 : 0
    if x.nil? && is_ip == 1
      return false
    elsif x == on_to_off
      return false
    end
    return true
  end

一般情况下你不写if x == true。在红宝石中,true and false是不同的价值观。例如,1 == true is false.

相反,只需检查if x or if !x.

def check_my_ip
  # Note that an explicit `self` is not necessary except when setting a value.
  x = sip.my_ip_changed?
  is_ip = sip.my_ip

  if x && is_ip
    return false
  elsif !x && is_ip
    return false
  elsif x
    return true
  end 
end

def set_ip_setting
  if self.sip.try(:my_ip)
    sip.nat = "yes"
    sip.invite = "yes"
  end
end

您的逻辑可以简化,并使用隐式返回。

def check_my_ip
  x = sip.my_ip_changed?
  is_ip = sip.my_ip

  if is_ip
    false
  elsif x
    true
  else
    false
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

铁轨变了?方法总是错误的 的相关文章

随机推荐

  • 在 Web2py Python 中格式化日期

    我正在寻找一个函数来格式化日期以获得日 月和年 日期以以下格式存储在我的数据库中 2012 09 26 如果你的目标是在web2py模板上显示 那么你必须使用纯Python来格式化 row datetime field strftime d
  • 多选列表,每个项目都有数量选项

    我的 html 页面中有一个自由文本字段 但我想用给定的字符串填充它 假设我有字符串 apple banana 和 pineapple 现在我想要一个 添加内容 按钮来打开模式框 或者如果更简单 只需将列表嵌入到我的页面中 给我一个列表 我
  • 如何从正则表达式捕获组中修剪空格?

    正在检查的字符串类似于以下内容 注意括号之间的空格 name address zip phone number 我现在使用的表达方式 成功捕获括号内的每个文本 但它也捕获前导和尾随空格 所以我最终得到 name address zip ph
  • AES/CBC/PKCS5Padding 问题

    我正在尝试加密和解密一些简单的文本 但由于某种原因 我遇到了一个奇怪的错误 javax crypto BadPaddingException 为什么 JCE 会生成未正确填充的字节 我有以下代码 import javax crypto Ci
  • 到底什么是“线程安全类型”?什么时候我们需要使用“lock”语句?

    我阅读了所有有关线程安全类型和 lock 语句的文档 但我仍然没有 100 理解它 到底什么时候需要使用 lock 语句 它与 非 线程安全类型有何关系 谢谢 想象一个类的实例 其中有一个全局变量 想象两个线程调用该对象的方法恰好在同一时间
  • 将 android 库添加到 Studio/SDK 中的默认库列表中

    首先 为了消除任何疑问 我知道如何向 Android 项目添加库 我的问题是 我想将一个库添加到我的 android studio 中的默认库列表中 让我用一个例子来解释一下 假设我想将 Glide 库添加到我的项目中 首先 我必须转到 g
  • 克隆一个包含所有关系的 Eloquent 对象?

    有没有什么方法可以轻松克隆 Eloquent 对象 包括它的所有关系 例如 如果我有这些表 users id name email roles id name user roles user id role id 除了在中创建一个新行use
  • 如何使用 jquery 动态更改 iframe 中的内容?

    我想知道是否可以有一个带有 iframe 和一些 jquery 代码的网站 每 30 秒更改 iframe 内容 内容位于不同的网页中 像这样的东西
  • setInterval() 不重复。仅有效1次

    我试图让 div 的 left 属性自行改变 当你将鼠标悬停在上面时每秒改变一次 所以我做了这个 div scroll left hover function var left num div license video css left
  • 如何使用 ggplot 将点随机散布在圆内,而不聚集在中心周围?

    我想用ggplot画一个圆 然后在圆内散布点 我有代码 摘自这个答案 https stackoverflow com a 68606605 6105259 这让我非常接近我想要的 但是 我希望点分散在圆内randomly 但现在我在中心周围
  • WPF Datagrid 中的 ItemTemplateSelector 与 AutoGenerateColumns

    在我们的数据网格中 我们使用ItemTemplateSelector根据绑定到特定单元格的数据在两个数据模板之间切换 由于列数取决于我们正在使用的当前数据集AutoGenerateColumns in our DataGrid 看来这个特殊
  • 有没有办法以编程方式将 iOS 设备的相机焦点设置为无限远?

    我正在创建一个应用程序 可以锁定相机焦点以进行视频录制 我想将焦点锁定到无限远 而无需用户手动调整焦点 这可能吗 谢谢 可悲的是没有 正如 Artem 所说 你可以将相机设置为焦点锁定模式 进入自动对焦模式 对焦 然后锁定 或连续自动对焦模
  • AndroidManifest.xml 使用 `android:name="io.flutter.app.FutterApplication"`

    升级到Flutter 2 10后 出现以下错误 Warning Your Flutter application is created using an older version of the Android embedding It i
  • Magento 愿望清单 - 删除项目

    我构建了一个自定义脚本 用于使用 AJAX 在愿望清单中添加和删除项目 添加产品不是问题 但我不知道如何删除项目 Magento 版本是1 5 1 0 脚本位于 scripts 看起来像这样 include once app Mage ph
  • 如何为 GAE 数据存储数据模型创建两个唯一的可查询字段?

    首先进行一些设置 上周 我在实现我构建的一种特定方法时遇到了麻烦 该方法允许我管理与一个 db Model 对象关联的两个唯一字段 由于这是不可能的 因此我创建了一个父实体类和一个子实体类 每个类都为 key name 分配了一个唯一值 你
  • Rails new 给出“在任何源中都找不到正确版本的 Railties (4.2.5.1)”错误

    我正在尝试将 Rails 5 0 0 rc1 与 Ruby 2 3 1 一起使用 但是 如果我尝试在 programming 目录中创建一个新项目 我会得到以下信息 Documents Programming rails new foo C
  • 未找到资源样式/LaunchTheme

    我刚刚将应用程序的图标更改为较新的图标 现在每当我尝试构建并运行该应用程序时 我都会收到以下错误 Project build app intermediates manifests full debug AndroidManifest xm
  • 将 GZIP:ed 文本存储在 mysql 中?

    对于较大的应用程序和数据库来说 在将文本数据插入数据库之前对其进行 GZIP 压缩是很常见的事情吗 我猜想在再次解压缩之前 对实际文本字段的任何全文搜索都将不起作用 我还没有看到太多这样的事情 因为它基本上可以防止人们对 MySQL 端的数
  • Redux、规范化实体和 lodash 合并

    我使用 Redux React 和 Lodash 以及相当标准的标准化实体存储 当我在 redux 减速器中合并新实体时 对所有现有实体的引用都会发生变化 尽管没有被修改 从而导致任何纯组件重新渲染 lodash 合并是否有一种替代方法 可
  • 铁轨变了?方法总是错误的

    我正在尝试检查我的模型中复选框值是否已更改 如果改变了我想要我的方法set ip setting跑进去before save but my x即使我更改值 变量也总是返回 false 为什么它总是返回错误 我不明白我做错了什么 before