我的申请有Dwellings
和Roomies
。我正在Dwelling
视图中构建一些身份验证 - 只有users
当前roomies
的{{1}}应该能够查看某些数据 - 所有其他用户都会看到不同的图。
要启用此功能,我已在dwelling
中创建了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
当我在执行此操作后加载页面时,我得到以下NoMethoderror:
Dwellings中的NoMethodError#show
显示&gt; /Volumes/UserData/Users/jraczak/Desktop/Everything/rails_projects/Roomie/roomie/app/views/dwellings/show.html.erb第5行引发:
未定义的方法`is_roomie?'对于#User:0x00000102db4608&gt;
对于某些背景,我确实尝试将此作为## show.html.erb (Dwelling) ##
....
<% if current_user && current_user.is_roomie? %>
....
方法并将其移至Dwelling
模型中无效。提前感谢所有见解!
答案 0 :(得分: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) %>
答案 1 :(得分:0)
current_user对象没有方法is_roomie?。这是控制器中的一种方法。您可以在show动作中调用该方法,并使其可用于视图,如下所示:
#in UsersController.rb
def show
@is_roomie = is_roomie?
end