1

我的应用程序有DwellingsRoomies。我正在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 其中第 5 行提出:

未定义的方法“is_roomie?” 对于#用户:0x00000102db4608>

对于某些背景,我确实尝试过将其作为一种Dwelling方法并将其移入User模型中,但无济于事。提前感谢您的任何见解!

4

2 回答 2

2

current_user是一个User对象,而不是一个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?。这是您的控制器中的一种方法。您可以在显示操作中调用该方法并使其可用于视图,如下所示:

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