如何检查对象是否退出视图ROR

Har*_*man 1 ruby if-statement ruby-on-rails

我已经在远程lat long上实现了查询,并在这样的查询中创建虚拟字段

user        = User.all
if longitude.present? && latitude.present? && fulladdress.present?

   distantQuery = "(3959 * acos( cos( radians("+latitude+") ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians("+longitude+")) + sin( radians("+latitude +")) * sin(radians(latitude))))  < " + miles
   user = User.select("*, (3959 * acos(cos(radians("+latitude+")) * cos( radians(latitude)) * cos(radians(longitude) - radians("+longitude+")) + sin(radians(" +latitude +")) * sin(radians(latitude))))  as distant").where(distantQuery)
end
Run Code Online (Sandbox Code Playgroud)

当我的if条件运行然后遥远的另一个明智的时候它就不会来了

<% @result.each do |r| %>
<tr>
<td>
 <%= r.distant.present %>

</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

现在在视野中我的遥远是来自形式查询然后它将显示结果,当它不会来时它会显示我的错误

undefined method `distant' for #<User:0x000000092a6558>
Run Code Online (Sandbox Code Playgroud)

我在视图中实现了"礼物"

  <% if r.distant.present? %>
                        <%= r.distant.to_i %>   


                <% end %>
Run Code Online (Sandbox Code Playgroud)

但它仍然显示我的错误,我将用什么来检查遥远的是否会出现然后它会显示而其他明智的不是?

ant*_*paw 5

这应该工作:

 <% if r.respond_to?(:distant) %>
Run Code Online (Sandbox Code Playgroud)

但是这在视图中是太多的逻辑,我建议你重构一些代码,在你的视图中有非常简单和安全的方法