Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Nil param值导致崩溃。如果值I';我把它设为存在?_Ruby On Rails_Ruby_Ruby On Rails 4_Link To - Fatal编程技术网

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