控制器抛出NoMethodError中定义的方法

时间:2012-11-10 21:18:47

标签: ruby-on-rails methods nomethoderror

我的申请有DwellingsRoomies。我正在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模型中无效。提前感谢所有见解!

2 个答案:

答案 0 :(得分: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) %>

答案 1 :(得分:0)

current_user对象没有方法is_roomie?。这是控制器中的一种方法。您可以在show动作中调用该方法,并使其可用于视图,如下所示:

#in UsersController.rb
def show
  @is_roomie = is_roomie?
end