Ruby on rails Nil param值导致崩溃。如果值I';我把它设为存在?
这是我的代码:Ruby on rails Nil param值导致崩溃。如果值I';我把它设为存在?,ruby-on-rails,ruby,ruby-on-rails-4,link-to,Ruby On Rails,Ruby,Ruby On Rails 4,Link To,这是我的代码: <% @garments.each do |garment| %> <tr> <td> <div> <%= link_to "Edit", edit_adminpanel_path( :id => garment["objectId"], :image => garment["image"].url, :ima
<% @garments.each do |garment| %>
<tr>
<td>
<div>
<%= link_to "Edit", edit_adminpanel_path(
:id => garment["objectId"],
:image => garment["image"].url,
:image2 => garment["image2"].url,
:image3 => garment["image3"].url,
:image4 => garment["image4"].url,
:image5 => garment["image5"].url,
:image6 => garment["image6"].url)
%>
</div>
服装[“objectId”],
:image=>garment[“image”].url,
:image2=>garment[“image2”].url,
:image3=>garment[“image3”].url,
:image4=>garment[“image4”].url,
:image5=>garment[“image5”].url,
:image6=>garment[“image6”].url)
%>
如您所见,我正在创建参数并使用图像的图像url设置它们。但是,一个对象并不总是有6个图像。有些可能有2个,有些可能有3个,有些甚至可能只有一个图像。调用nil属性将导致我的应用程序崩溃
我试图在每行末尾的逗号前添加if语句,但这不起作用。如何安全地检查对象图像是否存在,然后才创建并设置其相应的参数值
最初我尝试将整个对象作为参数传递,但在另一个控制器中遇到了问题。所以现在我想分别传递图像URL
感谢您的时间您可以通过仅添加现有值动态构建它:
<% path_params = %w(image image2 image3 image4 image5 image6).each_with_object(:id => garment["objectId"]) do |name, hash|
hash[name.to_sym] = garment[name].url if garment[name]
end %>
<%= link_to "Edit", edit_adminpanel_path(path_params) %>
garment[“objectId]”do |名称,散列|
hash[name.to_sym]=garment[name]。garment[name]的url
结束%>
您可以使用。尝试方法:
<%= link_to "Edit", edit_adminpanel_path(
:id => garment["objectId"],
:image => garment["image"].try(:url),
:image2 => garment["image2"].try(:url),
:image3 => garment["image3"].try(:url),
:image4 => garment["image4"].try(:url),
:image5 => garment["image5"].try(:url),
:image6 => garment["image6"].try(:url))
%>
使用AND和gem,因此garment[“image2”]。AND和.url
您可以使用:image2=>garment[“image2”]。尝试(:url)
而不是安装AND和
gem。解释:object.try(:method)
将调用.method
在对象上,如果它响应。method
(nil
不响应。url
所以它将返回nil
)我喜欢这两个答案,但更喜欢这种方式。我喜欢动态做事的想法。
nil.try(:whatever) # => nil (does not raise NoMethodError)
Hash.new[:whatever].try(:url) # => nil