我在一個視圖中有這樣的回報率片段:link_to_unless問題
<%= link_to_unless(@posts_pages[:previous].nil?,
"Previous",
blog_with_page_path(:page_num => @posts_pages[:previous])) %>
這裏blog_with_page是一個名爲路線。如果@posts_pages[:previous].nil?
爲false
(如預期的)並且鏈接正確生成,則該片段有效。然而,當@posts_pages[:previous].nil?
是true
,而不是簡單地得到"Previous"
字符串回來,我得到一個錯誤告訴我,路線不能使用:page_num=>nil
生成。這是預期的行爲?如果條件得到滿足,路線代碼不應該被評估,應該嗎? 以下是完整的錯誤: blog_with_page_url failed to generate from {:page_num=>nil, :action=>"show", :controller=>"pages"}, expected: {:action=>"show", :controller=>"pages"}, diff: {:page_num=>nil}
我一直在尋找的代碼,我不明白爲什麼我得到的錯誤,因爲它應該簡單地返回名稱:
# File actionpack/lib/action_view/helpers/url_helper.rb, line 394
def link_to_unless(condition, name, options = {}, html_options = {}, &block)
if condition
if block_given?
block.arity <= 1 ? capture(name, &block) : capture(name, options, html_options, &block)
else
name
end
else
link_to(name, options, html_options)
end
end
我m使用Rails 2.3.11和Ruby 1.8.7
乾杯!
不是一個錯誤。這是語言的工作原理。 – 2011-04-20 15:31:38
Ehm ...這不是一個語言錯誤,但在Rails中有很多「懶惰」的東西,所以這是一個很好的候選者,可以被重構爲懶惰的東西。 – fl00r 2011-04-20 15:32:38