有了這個代碼:語法錯誤具體參數順序
Sponsorship.includes(patient: :vaccinations, :backer)
我得到syntax error, unexpected ')', expecting =>
。但是當我改變參數的順序時,如下所示:
Sponsorship.includes(:backer, patient: :vaccinations)
錯誤消失。爲什麼語法錯誤依賴於參數的順序?
有了這個代碼:語法錯誤具體參數順序
Sponsorship.includes(patient: :vaccinations, :backer)
我得到syntax error, unexpected ')', expecting =>
。但是當我改變參數的順序時,如下所示:
Sponsorship.includes(:backer, patient: :vaccinations)
錯誤消失。爲什麼語法錯誤依賴於參數的順序?
你這裏有兩種有效的替代品:
@sponsorship = Sponsorship.includes({ patient: :vaccinations }, :backer)
.find_by_slug(params[:id])
@sponsorship = Sponsorship.includes(:backer, patient: :vaccinations)
.find_by_slug(params[:id])
第一次有兩個參數,第一個是一個哈希,第二個是一個值,
在第二個例子你仍然有2個參數,第一個是值,第二個是隱式哈希。在Ruby中,你可以省略括號當散列傳遞給方法
你在這裏做什麼的最後一個參數:
@sponsorship = Sponsorship.includes(patient: :vaccinations, :backer)
.find_by_slug(params[:id])
被解釋爲:
@sponsorship = Sponsorship.includes({ patient: :vaccinations, :backer })
.find_by_slug(params[:id])
這顯然是錯誤的,因爲哈希需要一個{ key0: value0, keyN: valueN }
語法。
真棒解釋!謝謝。 –
這不是有效的ruby語法。你大概的意思是:
@sponsorship = Sponsorship.includes(patient: [:vaccinations, :backer]).find_by_slug(params[:id])
注意patient:
相同:patient =>
,這是一個哈希的關鍵protion。所以紅寶石希望接下來的事情是哈希值的一半,而不是事物列表。我把它改成了一個數組(不知道這是你的意思)。
不完全是我的意思。根據你的建議,你暗示贊助有一名患者,患者有很多接種疫苗,患者有一名支持者,情況並非如此。這真的是贊助有一個病人,病人有很多疫苗接種,贊助有一個支持者。 –
因爲如果依靠Ruby語法糖來避免自己編寫{}
,那麼散列參數需要是最後一個參數。
如果我要保持參數的順序,我將如何修復導致錯誤的行?我認爲有人評論過這樣的解決方案,但刪除了它。 –
@sponsorship = Sponsorship.includes(:backer, patient: [:vaccinations]).find_by_slug(params[:id])
儘管此代碼可能會回答這個問題,但提供有關爲何和/或代碼如何回答此問題的其他上下文可提高其長期價值。 – NathanOliver
你的問題是什麼? – sawa
他有一個語法錯誤,想知道爲什麼。 – Daiku