我正在编写一个辅助方法,根据两个数字是否相等而向元素添加一个类。我的代码如下:
<% for note in @company.convertible_notes.each %>
<% if note.id %>
<li class="tab <%= note_nav(params, note.id) %>"><%= link_to "#{note.security_series} #{note.security_class} Note", convertible_note_convertible_notees_path(note) %></li>
<% end %>
<% end %>
note_nav调用以下帮助程序:
def note_nav(params, note)
"active" if params[:controller]=="convertible_notees" && note.to_s==params[:converible_note_id].to_s
end
现在令人惊讶的是,我无法让表达式note.to_s==params[:converible_note_id].to_s
注册为true。即使我知道被比较的两个数字都是“1”。我用我的日志检查了它:
logger.debug "are they equal? #{note.to_s==params[:converible_note_id].to_s} note.id is #{note} note params are #{params[:convertible_note_id]}"
产生以下日志条目:
他们是平等的吗? false note.id是1 note params是1
我猜他们是两种不同的类型,但考虑到我已经转换了它们to_s
,我不知道这会是一个什么问题。我已经在其他模型的几个组合上使用了这种完全相同的技术,并且完全没有错误。知道可能会发生什么吗?
提前致谢
答案 0 :(得分:2)
看看你的测试
"are they equal? #{note.to_s==params[:converible_note_id].to_s} note.id is #{note} note params are #{params[:convertible_note_id].to_s}"
:converible_note_id
和:convertible_note_id
是其他键,类型错误
答案 1 :(得分:0)
如果其中一个变量包含非打印字符,您也可以获得该输出:
note = "1\000"
params = {
convertible_note_id: 1
}
puts "are they equal? #{note.to_s==params[:convertible_note_id].to_s}"
puts "note.id is #{note} note params are #{params[:convertible_note_id]}"
--output:--
are they equal? false
note.id is 1 note params are 1
要查看字符串中的内容,您应该始终使用inspect():
p note.to_s, params[:convertible_note_id].to_s
--output:--
"1\u0000"
"1"