我從我的一個控制器類中得到一個錯誤,我找不到原因。錯誤是:
SyntaxError in TermsController#show, syntax error, unexpected $end, expecting keyword_end
這裏是terms_controller.rb:
我的節目頁面目前只包括:
<h1> <%= @title %> </h1>
這可能是一些小的是我只是失蹤 - 謝謝你的幫助!
我從我的一個控制器類中得到一個錯誤,我找不到原因。錯誤是:
SyntaxError in TermsController#show, syntax error, unexpected $end, expecting keyword_end
這裏是terms_controller.rb:
我的節目頁面目前只包括:
<h1> <%= @title %> </h1>
這可能是一些小的是我只是失蹤 - 謝謝你的幫助!
,有沒有足夠的end
關鍵字,它發現$end
(令牌表示文件的年底),才能夠找到它一直在尋找這個問題 - 另一個end
。 (用於end
關鍵字解析器令牌可以是「keyword_end」或「DMOZ目錄」,這取決於紅寶石版本。)
每個if
表達需要一個匹配end
關鍵字。
要解決此問題,請使用elsif
而不是else if
。它是同一個if
結構的一部分,不需要匹配end
(只有if
需要匹配end
)。
if x == 1
"1"
elsif x == 2
"2"
else
"else"
end
另一種選擇是case
如果所有分支檢查(在這種情況下x
)相同的條件操作效果很好:
case x
when 1 then "1"
when 2 then "2"
else "else"
end
如果做要使用else if
(記住,每個if
開始一個新的if
條件構造),然後確保關閉每個塊if
打開。我縮進了代碼以更好地展示這一點。
if x == 1
"1"
else
if x == 2
"2"
else
"else"
end
end
快樂編碼。
對於迂腐:還有的if
另一種形式,這是expr if cond
,它不具有匹配end
作爲語法的一部分,規則上面談到的並不適用於它。
此外,if
和case
是只是表達的紅寶石,所以它可能是更地道寫成這樣
@term = Term.find(params[:id])
@title = case @term.id
when 1 then "Fall"
when 2 then "Winter"
when 3 then "Spring"
when 4 then "Summer"
else "Invalid Term"
end
的if/elsif/end
語法可以以同樣的方式被使用,但使用case
避免反覆提及@term.id
。另一個選擇是使用哈希執行這種簡單的映射 - 或映射可以封裝在一個單獨的方法 - 但這是其他地方覆蓋;-)
而不是else if
使用elsif
。
爲什麼不只是這樣做:
class TermsController < ApplicationController
@@seasons = { 1 => "Fall", 2 => "Winter", 3 => "Spring", 4 => "Summer"}
def show
@term = Term.find(params[:id])
@title = @@seasons[params[:id]] || "Invalid Season"
end
end
在看你的原代碼,你實際上是在使用術語ID來獲得本賽季。最好重寫Term類中的title屬性訪問器以返回正確的String。可以使用哈希和查找,因爲我在模型中的控制器中具有此處。 –