0

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 の命名規則がここで「役立つ」方法についてコメントを送信してください。よろしくお願いします!

4

1 に答える 1

1

current_user通常はUserインスタンスを返しますが、これを実行すると正常に動作しますUser.find(cur_user)(同じユーザーが返されます)。ただし、最初の引数は id (c.user_idビュー内) です。できますowner == cur_user.id

メソッドで常に ID が必要な場合は、おそらく変数に名前を付ける必要がありますowner_id

于 2012-10-10T05:20:58.277 に答える