如果,否则,动态语句逻辑
有人能解释一下这个代码背后的逻辑(这是顺便说一句正确的代码)如果,否则,动态语句逻辑
<% if @request.query['first_name'] && [email protected]['first_name'].empty? %>
Welcome! <%= @request.query['first_name'] %>
<% else %>
Hi! What is your name?
<% end %>
我的直觉是写而不是以下:
<% if @request.query.inspect['first_name'].empty? %>
Hi! What is your name?
<% else %>
Welcome! <%= @request.query.inspect['first_name'] %>
<% end %>
我我试图建立一个用户表单,用户可以在其中输入他们的姓名,当没有输入时,表单上方的文字会显示“你好!你叫什么名字?”当有一个输入时,它有一条消息说:“Welcome!* User_name *”
第一块代码对我来说并不直观,第二块代码会更有意义.. ANy关于如何理解代码的建议?
你的直觉是正确的,但你需要empty?
替代。 Rails添加了以下几种不同的方法供您使用:
blank?
如果接收方是nil
,一个空数组,字符串或散列或只有空白的字符串,则返回true。
present?
如果blank?
为假,则返回true。所以,你的情况可能是:
<% if @request.query['first_name'].present? %>
Welcome...
(我发现它总是更直观开始与积极条件 - 这将很好的工作,以检查blank?
)。
编辑:这很可能是你可以完全跳过查询方法,如果你希望有一个字符串或nil
。只需使用:
<% if @request.query['first_name'] %>
你需要检查它是否是零,然后才可以,如果其空检查,因为你检查Hash#empty?
irb(main):001:0> nil.empty?
NoMethodError: undefined method `empty?' for nil:NilClass
from (irb):1
irb(main):002:0> {}.empty?
=> true
您可以通过transforimng零到一个空字符串避免if语句中的第一个条件。我不知道你是否打算这样做,但你几乎没有。
首先,您不应该在哈希中调用inspect
,因为它会将整个事物转换为“复杂”字符串。你想要做的只是在first_name
选项里面的值,因为在这种情况下,如果名字存在,它仍然是相同的,如果不存在,它将变成"nil"
。
其次,方法inspect
不是这里的最佳选择,因为返回的字符串永远不会是空的,因为nil.inspect => "nil"
。你应该使用的方法是to_s
,如果适用于零:nil.to_s => ""
,它的行为将如此。
最后,你可以更新您的代码:
<% if @request.query['first_name'].to_s.empty? %>
Hi! What is your name?
<% else %>
Welcome! <%= @request.query['first_name'] %>
<% end %>
'查询。inspect [“first_name”]'会返回字符串'“first_name”'或'nil'。 –
你是对的,我忘了删除'inspect'方法 –
@ZachKemp我没有意识到他现在正在调用'inspect'查看整个哈希。这很奇怪,因为它永远不会达到'first_name'的值,我想他的意思是使用'query [“first_name”]。inspect' –
的代码检查哈希键的存在,然后检查哈希值是存在的。这个动作可以在一个检查使用来完成:
@request.query.try(:[], 'first_name').empty?
当我尝试此解决方案时出现以下错误:未定义的方法尝试{“first_name”=> “blah13”}:哈希 – user3408293
那么你没有使用rails,为什么你将它添加到标签? –
你是什么意思?我不明白你的问题。 – user3408293
我不会建议使用'if @ request.query ['first_name']'因为不等于第一个代码,因为空字符串会通过这个条件并且可能会导致意外的结果 –
@RafaelRamosBravin,你是对的。实施取决于代码库的测试程度。 –
使用.present?不管用。我得到一个错误,但做@ request.query ['first_name']工作,任何人都知道为什么.present?可能无法工作?我收到以下错误消息:未定义的方法'存在?'为“blah13”:WEBrick :: HTTPUtils :: FormData – user3408293