2014-11-06 20 views
1

我必须在link_to image_tag语句中处理一组条件 - 图像是否存在,用户是否拥有它?这导致了可怕的代码量。我想要做的就是这一点 -是否可以将三元运算符放入函数调用中?

link_to image_tag(image.blank? ? generic_image : image), current_user == image.user ? edit_image_path(image) : image_path(image) 

...是有可能做到这一点(和我得到的错误,只是语法问题),或者这只是不会做,能?

+0

我不确定,但我很肯定,如果是的话,您需要将括号内的整个三元操作包裹起来。 'image_tag((image.blank??generic_image:image))' – 2014-11-06 09:54:58

回答

1

它可能更容易为自己定制的帮手 - 是这样的:

def link_as_image(image) 
    image = generic_image if image.blank? 
    path = path_for image 

    link_to image_tag(image), path 
end 

def path_for(image) 
    current_user == image.user ? edit_image_path(image) : image_path(image) 
end 
+0

嗨达克斯 - 它发现我的错误是语法,它可以与三元操作符 - 但你的答案看起来不错,因为我要做一个很多 - 欢呼声:) – RADan 2014-11-06 10:04:13

+0

根本不是 - 如果你能使某些东西可重用,通常这样做更好。如果有帮助,请检查我的回答:) – dax 2014-11-06 10:05:28

0

这是可能的 - 我得到这个工作:

<%= link_to image_tag((book.cover.blank? ? 'gen_book_cover.png' : book.cover), class: "bookcover"), book.user == current_user ? edit_book_path(book) : book_path(book), class: 'nolinkystyle' %> 

...但是这种方法在上面的答案中对我更好,因为在一堆地方实现它更简单。

相关问题