2013-10-04 70 views
0

我喜歡三元運算符。它真的清理了代碼的外觀,但我有一個情況,它不會在Rails控制器中正確運行。爲什麼三元運算符不能使用重定向

我得到一個語法錯誤:unexpected tSYMBEG, expecting keyword_do or '{' or '('

我一直得到這個問題,它改變下面一個三元運算符的聲明燈的開關。當我試圖將它與重定向語句結合使用時,它總是會發生。

我不知道這個規則嗎?

if nexti==0 then 
    redirect_to :back 
else 
    redirect_to edit_playt_path(id: actform['playt_id'], i: nexti) 
end 

nexti==0 ? redirect_to :back : redirect_to edit_playt_path(id: actform['playt_id'], i: nexti) 
+0

我認爲這具有相同的缺陷,即使它的工作,你仍然可能需要括號只是爲了你自己的理智。 –

回答

1

由於哈希

的Ruby/Rails的暗示性會暗示你的論點重定向是一個散列,在你的例子中有一些尷尬的含義

當ruby意味着重定向它的參數se上課它在以下情況下它散列解析它作爲

nexti==0 ? redirect_to({:back, : redirect_to edit_playt_path(id: actform['playt_id'], i: nexti}) 

這是無效的,它應該工作,如果你明確地定義你的散列/參數

nexti==0 ? redirect_to(:back) : redirect_to(edit_playt_path({id: actform['playt_id'], i: nexti})) 

大多數的Ruby/Rails開發者都會告訴你因爲這樣的原因避開三元論,並且也理解一般人對事情的理解。 Ruby渴望成爲一種富有表現力的語言,所以擁抱它。

return redirect_to(:back) if nexti==0 
redirect_to(edit_playt_path({id: actform['playt_id'], i: nexti})) 
0

您需要使用括號在調用redirect_to所以解析器可以正確理解這是怎麼回事:

nexti==0 ? redirect_to(:back) : redirect_to(edit_playt_path(id: actform['playt_id'], i: nexti)) 
相關問題