Ruby on rails If、else动态语句逻辑
有人能解释一下这个代码背后的逻辑吗?(顺便说一句,这是正确的代码)Ruby on rails If、else动态语句逻辑,ruby-on-rails,ruby,Ruby On Rails,Ruby,有人能解释一下这个代码背后的逻辑吗?(顺便说一句,这是正确的代码) 欢迎 你好你的名字叫什么? 我的直觉是写以下内容: <% if @request.query.inspect['first_name'].empty? %> Hi! What is your name? <% else %> Welcome! <%= @request.query.inspect['first_name'] %> <% end %>
欢迎
你好你的名字叫什么?
我的直觉是写以下内容:
<% if @request.query.inspect['first_name'].empty? %>
Hi! What is your name?
<% else %>
Welcome! <%= @request.query.inspect['first_name'] %>
<% end %>
你好你的名字叫什么?
欢迎
我正在尝试建立一个用户表单,当没有输入时,表单上方的文本会显示“嗨!你叫什么名字?”当有输入时,表单会显示一条消息,说“欢迎!*用户名*”
第一段代码对我来说并不直观,第二段代码更有意义。。关于如何理解代码有什么建议吗?您需要先检查它是否为零,然后才能检查它是否为空,因为您正在检查
您需要先检查它是否为零,然后才能检查它是否为空,因为您正在检查
您需要先检查它是否为零,然后才能检查它是否为空,因为您正在检查
您需要先检查它是否为零,然后才能检查它是否为空,因为您正在检查
通过将nil转换为空字符串,可以避免if语句中的第一个条件。我不知道你是不是想这么做,但你几乎做到了 首先,您不应该在散列中调用
inspect
,因为它会将整个内容转换为一个“复杂”字符串。您要做的只是将first\u name
选项中的值转换,因为在这种情况下,如果名称存在,它仍然是相同的,如果不存在,它将转换为“nil”
其次,这里的方法inspect
不是最佳选择,因为返回的字符串永远不会为空,因为nil.inspect=>“nil”
。您应该使用的是方法to\u s
,它在应用于nil时的行为如下:nil.to\u s=>“”
最后,您可以将代码更新为:
<% if @request.query['first_name'].to_s.empty? %>
Hi! What is your name?
<% else %>
Welcome! <%= @request.query['first_name'] %>
<% end %>
你好你的名字叫什么?
欢迎
通过将nil转换为空字符串,可以避免if语句中的第一个条件。我不知道你是不是想这么做,但你几乎做到了
首先,您不应该在散列中调用inspect
,因为它会将整个内容转换为一个“复杂”字符串。您要做的只是将first\u name
选项中的值转换,因为在这种情况下,如果名称存在,它仍然是相同的,如果不存在,它将转换为“nil”
其次,这里的方法inspect
不是最佳选择,因为返回的字符串永远不会为空,因为nil.inspect=>“nil”
。您应该使用的是方法to\u s
,它在应用于nil时的行为如下:nil.to\u s=>“”
最后,您可以将代码更新为:
<% if @request.query['first_name'].to_s.empty? %>
Hi! What is your name?
<% else %>
Welcome! <%= @request.query['first_name'] %>
<% end %>
你好你的名字叫什么?
欢迎
通过将nil转换为空字符串,可以避免if语句中的第一个条件。我不知道你是不是想这么做,但你几乎做到了
首先,您不应该在散列中调用inspect
,因为它会将整个内容转换为一个“复杂”字符串。您要做的只是将first\u name
选项中的值转换,因为在这种情况下,如果名称存在,它仍然是相同的,如果不存在,它将转换为“nil”
其次,这里的方法inspect
不是最佳选择,因为返回的字符串永远不会为空,因为nil.inspect=>“nil”
。您应该使用的是方法to\u s
,它在应用于nil时的行为如下:nil.to\u s=>“”
最后,您可以将代码更新为:
<% if @request.query['first_name'].to_s.empty? %>
Hi! What is your name?
<% else %>
Welcome! <%= @request.query['first_name'] %>
<% end %>
你好你的名字叫什么?
欢迎
通过将nil转换为空字符串,可以避免if语句中的第一个条件。我不知道你是不是想这么做,但你几乎做到了
首先,您不应该在散列中调用inspect
,因为它会将整个内容转换为一个“复杂”字符串。您要做的只是将first\u name
选项中的值转换,因为在这种情况下,如果名称存在,它仍然是相同的,如果不存在,它将转换为“nil”
其次,这里的方法inspect
不是最佳选择,因为返回的字符串永远不会为空,因为nil.inspect=>“nil”
。您应该使用的是方法to\u s
,它在应用于nil时的行为如下:nil.to\u s=>“”
最后,您可以将代码更新为:
<% if @request.query['first_name'].to_s.empty? %>
Hi! What is your name?
<% else %>
Welcome! <%= @request.query['first_name'] %>
<% end %>
你好你的名字叫什么?
欢迎
代码检查哈希键是否存在,然后检查哈希值是否存在。此操作可通过以下方式在一次检查中完成:
@request.query.try(:[], 'first_name').empty?
代码检查哈希键是否存在,然后检查哈希值是否存在。此操作可通过以下方式在一次检查中完成:
@request.query.try(:[], 'first_name').empty?
代码检查哈希键是否存在,然后检查哈希值是否存在。此操作可通过以下方式在一次检查中完成:
@request.query.try(:[], 'first_name').empty?
代码检查哈希键是否存在,然后检查哈希值是否存在。此操作可通过以下方式在一次检查中完成:
@request.query.try(:[], 'first_name').empty?
你的直觉是正确的,尽管你需要一个替代
空?
。Rails添加了一些您可以使用的不同方法:
blank?
如果接收者是nil
、空数组、字符串或散列,或者只有空格的字符串,则返回true
present?
如果blank?
为false,则返回true。所以你的情况可能是:
<% if @request.query['first_name'].present? %>
Welcome...
你的直觉是正确的,尽管你需要一个替代
空?
。Rails添加了一些您可以使用的不同方法:
blank?
如果接收者是nil
、空数组、字符串或散列,或者只有空格的字符串,则返回true
present?
返回