0
我受的傳入和傳出我的Rails參數和結果處理混淆視圖助手:爲什麼Rails視圖助手邏輯在一個實例中失敗,但在另一個實例中運行?
module CasesHelper
def case_owned(owner,cur_usr)
return false if (owner.nil?)
return false if (cur_usr.nil?)
x = User.find(cur_usr)
y = User.find(owner)
## this does not returns 'true'
## when expected
## return true if (owner == cur_usr)
return true if (x == y) #<<<< This line works
return false
end
end
這是視圖代碼:
<td><%= link_to 'Show', c %></td>
<td><%= (link_to 'Edit', edit_case_path(c)) if case_owned(c.user_id,current_user) %></td>
<td><%= (link_to 'Destroy', c, method: :delete, data: { confirm: 'Are you sure?' }) if case_owned(c.user_id,current_user) %></td>
如何運行的代碼工作和評論 - 不行嗎?爲什麼需要User.find()調用來確保相等。而且,怎能:
User.find(cur_usr) == User.find(owner)
...評估爲true
時:
cur_usr == owner
...評估爲false
我現在用的是制定創業板的認證和它提供了current_user方法。我最初使用「cur_usr == owner」行編碼上面的代碼,但使用User.find()方法實現了。我感到困惑的是,傳遞給find()的參數如何被認爲是不相等的,但返回的對象(記錄)被評估爲相等。我在這裏錯過了什麼?
請嘗試引導您的意見,以便如何將Ruby作爲參數處理傳遞對象或Rails命名約定如何「幫助」這裏。我提前感謝!
我嘗試使用case.user_id和current_user_id的調用參數,但是current_user_id拋出一個錯誤。然後我嘗試了current_user.id作爲調用參數,但是也拋出了一個錯誤。我很明白如何將User和User_id的實例傳遞給User.find()可以返回相同的結果。感謝您指出case_owned收到的對象類型中的重要區別。 –
是的。 Owner_id會更好。我只是嘗試「返回true,如果(所有者== cur_usr.id)」,它工作正常。謝謝!比每次執行兩個表查詢要快得多。仍然不確定爲什麼current_user.id不能用作視圖內的調用參數。 –