1

私のアプリケーションにはとがDwellingsありRoomiesます。ビューに認証を組み込んでいDwellingます-現在のユーザーだけusersが特定のデータを表示できるはずです-他のすべてのユーザーには別のビューが表示されます。roomiesdwelling

これを有効にするために、でis_roomie?メソッドを作成しましたUsers Controller。メソッドは次のようになります。

## is_roomie? method in Users_Controller.rb ##

def is_roomie?
roomie_ids = []
@dwelling.roomies.each do |r|
  roomies_ids << r.id
end
roomie_ids.include?(current_user.id)
end 

Dwellingビューでこのメソッドを次のように呼び出します。

## show.html.erb (Dwelling) ##
....
<% if current_user && current_user.is_roomie? %>
....

これを実装した後にページをロードすると、次のNoMethoderrorが発生します。

住居のNoMethodError#show

>/Volumes/UserData/Users/jraczak/Desktop/Everything/rails_projects/Roomie/roomie/app/views/dwellings/show.html.erbを表示しています。

未定義のメソッド`is_roomie? ' #User:0x00000102db4608の場合>

いくつかの背景として、私はこれをDwelling方法として試し、これをUserモデルに移動して無駄にしました。ありとあらゆる洞察を事前に感謝します!

4

2 に答える 2

2

current_userUserオブジェクトであり、オブジェクトではないUsersControllerため、そのオブジェクトで定義したメソッドを呼び出すことはできません。このコンテキストで考えると、でこのメソッドを定義する必要があることがわかりますUser

app / model/user.rbで次のようなものを試してください。

class User < ActiveRecord::Base
  # ...
  def roomie?(dwelling)
    dwelling.roomies.include?(self)
  end
end

ただし、これを見ると、app / models / dwelling.rbのDwellingクラスにコードを移動することで、コードを改善できます。

class Dwelling < ActiveRecord::Base
  # ...
  def roomie?(user)
    roomies.include?(user)
  end
end

次に、これを次のビューで使用します。

<% if current_user && @dwelling.roomie?(current_user) %>
于 2012-11-10T21:35:07.637 に答える
0

current_userオブジェクトにはメソッドis_roomie?がありません。これはコントローラーのメソッドです。次のように、showアクションでメソッドを呼び出して、ビューで使用できるようにすることができます。

#in UsersController.rb
def show
  @is_roomie = is_roomie?
end
于 2012-11-10T21:40:49.827 に答える