2016-03-07 69 views
2

我正在通过构建应用程序学习Rails。我的应用程序工作正常,直到我说这个代码到我的users_controller.rb未定义的方法`友谊'为#<User :: ActiveRecord_Relation:0x007fdd1adb7a00> Rails

def show 
    @user = User.find(params[:id]) 
    @user = User.order('created_at DESC').paginate(page: params[:page], per_page: 30) 

end 

def compare 
if current_user.profile  
    @users = User.find_by(id: params[:to].to_i) if params[:to] 

    @paper_weight_total_user = @users.papers.sum(:paper_weight) 
    else 
    redirect_to user_path 
    end 
end 

我将此添加到我的users_controller因为当前用户应该能够给他的数据进行比较,对他的朋友数据,如果他打“比较数据”按钮(如下图所示)

的compare_friends_path工作,我能到我的数据进行比较,以选择朋友的数据,但是当我想直接回到‘我的页面’的应用程序,让我这个错误:

undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00> 

,并说这行代码(do循环)导致错误:

<% @user.friendships.each do |friendship| %> 

我user.rb模型

has_many :friendships, dependent: :destroy 
has_many :friends, through: :friendships 

和我friendship.rb模型

belongs_to :user 
belongs_to :friend, :class_name => 'User' 
belongs_to :profile 

我一直试图弄清楚为什么现在发生这种情况后,我加入了比较选项,但我运气不好....任何人都可以帮助我或帮助解决问题这个。

在此先感谢 大地

+2

你可以发布定义'@ user'的控制器动作吗? – akz92

+1

hi @ akz92我编辑了帖子,现在它已在users_controller.rb中显示动作 – DaudiHell

回答

3
undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00> 

根据此错误信息,您@user对象为ActiveRecord_Relation对象,而不是User类的实例,因此,你的错误。

根据模型的设置,您可以通过使用获得friendships为特定的用户:@user.friendships但这@user必须是User类,但不是一个ActiveRecord_Relation对象的实例。

我认为这个问题是从show方法的这一行来:

@user = User.order('created_at DESC').paginate(page: params[:page], per_page: 30) 
在这种情况下

@user是一个ActiveRecord_Relation对象,但不是一个单一的用户。所以,当您在视图中调用@user.friendships时,您会收到上述错误。

您可能希望将其重命名为@users或类似的东西,因为这会返回一组用户。

而且,你已经在那里@user定义:

@user = User.find(params[:id]) 

其中@userUser类的一个实例。

+2

非常感谢,这很有帮助 – DaudiHell

+1

很高兴,我可以帮助:-) –

1

这是因为您的show操作的第二行覆盖第一行,因此@user实际上是用户的数组。

为了能够拨打@user.friendships@user必须是单个用户(用户的一个实例)。

您可以使用@user.first.friendships进行检查。这不会返回任何错误

+0

非常感谢@ akz92 – DaudiHell

相关问题