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
認証に Devise gem を使用しており、 current_user メソッドを提供しています。最初に「cur_usr == owner」行で上記をコーディングしましたが、User.find() アプローチを使用するとうまくいくことに気付きました。find() に渡されたパラメーターがどのように等しくないと見なされるのか、私には混乱しますが、返されるオブジェクト (レコード) は等しいと評価されます。ここで何が欠けていますか?
Ruby がオブジェクトをパラメーターとして渡す方法や、Rails の命名規則がここで「役立つ」方法についてコメントを送信してください。よろしくお願いします!