Ruby on rails 轨道改变了?方法总是错误的
我正在尝试在我的模型中检查复选框值是否已更改。如果它被更改,我希望我的方法Ruby on rails 轨道改变了?方法总是错误的,ruby-on-rails,Ruby On Rails,我正在尝试在我的模型中检查复选框值是否已更改。如果它被更改,我希望我的方法set\u ip\u setting在保存之前在中运行,但是我的x变量总是返回为false,即使我更改了值。为什么它总是假的?我看不出我做错了什么 before_save :set_ip_setting, if: :check_my_ip 已编辑 通过使用以前的更改方法,我得到了我想要的结果,但我认为有一种更干净的方法,但以下是对我有效的方法 def check_my_ip x = self.sip.prev
set\u ip\u setting
在保存之前在中运行,但是我的x
变量总是返回为false,即使我更改了值。为什么它总是假的?我看不出我做错了什么
before_save :set_ip_setting, if: :check_my_ip
已编辑
通过使用以前的更改方法,我得到了我想要的结果,但我认为有一种更干净的方法,但以下是对我有效的方法
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
如果x==true,则通常不编写。在Ruby中,true
和false
是不同的值。例如,1==true
是false
相反,只需检查if x
或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
如果x==true,则通常不编写。在Ruby中,true
和false
是不同的值。例如,1==true
是false
相反,只需检查if x
或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
这是什么?
my_ip_changed?
方法?在传递复选框值时,你能给我们显示模型类和控制器吗?@jvillian,看起来模型有一个my_ip
列,这是利用ActiveModel::Dirty@kbob的方法,你有没有尝试在方法中编写puts语句来确认错误是x为false,并不是说您的条件的行为与预期的不同?@ianroot我在调试语句中加入了Rails.logger.debug“option”{x}
,这确认了它总是错误的,我没有把它们包括在这里,因为我认为这个问题不需要这个my_ip_changed?
方法是什么?你能在传递复选框值时向我们展示模型类和控制器吗?@jvillian,看起来模型有一个my_ip
列,这是利用ActiveModel::Dirty@kbob中的方法,您是否尝试过在方法中编写puts语句来确认错误是x为false,而不是您的条件的行为与预期不同?@ianroot我已在调试语句Rails.logger.debug“option#{x}”
中添加了puts语句,确认它始终为false,我没有把它们包括在这里,因为我不认为这个问题需要它。谢谢你,但这并不能解释或告诉我为什么我的x
总是false
,这就是问题所在。@kbob如果没有看到我的知识产权发生了变化?
和以前的变化
我就不能告诉你,一般来说是什么self.sip
is.yes,我想我们需要了解更多关于表单和模型的信息才能找到问题谢谢,但这并不能解释或告诉我为什么我的x
总是false
,这就是问题所在。@kbob如果不看到my\u ip\u更改?
和以前的更改,我就不能告诉你,通常是什么self.sip
是。是的,我认为我们需要了解更多关于表单和模型的信息才能找到问题