Rails错误:"用户与用户的比较失败"

时间:2012-03-28 14:42:41

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 devise

我的rails应用程序中出现以下错误:

comparison of User with User failed

我的控制器的相关部分如下所示:

class AssessmentsController < ApplicationController
  before_filter :authenticate_user!
  respond_to :html, :xml, :js, :pdf

def index
  @user = current_user
  @account = Account.find(@user.account_id)
  @assessments = Assessment.all
  respond_with @assessments
end

我的观点的相关部分如下所示:

<%= form_for(@account) do |a| %>

<%= a.fields_for :users, @account.users.build do |u| %>

....
<%= a.submit "Sign-up", :class => "button", :disable_with => "Saving..." %>

<% end %>

<h1>Current users</h1>

<% for @user in @account.users.sort! { |b,a| a.id <=> b.id } %>
<%= render :partial => 'user' %>
<% end %>

根据错误模型,错误似乎源自for @user in @account.users.sort!部分,但删除它似乎是在创建它的fields_for部分中添加@account.users.build(但我需要这个因为我希望用户能够为该帐户创建一个新用户。有人可以告诉我这是什么产生的吗?

1 个答案:

答案 0 :(得分:9)

错误确实发生在该行上,因为ActiveRecord模型默认情况下不实现可比较。所以,当你说@account.users.sort!时,排序就会爆炸,因为它无法将用户与用户进行比较。

你可以在这里做两件事:

  1. 为您的用户模型实施比较运算符。查看this link有关如何操作的博客文章,但它类似于:

    class User < ActiveRecord::Base
    
      def <=>(other)
        self.name <=> other.name
      end
    
    end
    
  2. 直接告诉排序要使用的比较,如下所示:

    @account.users.sort! {|a, b| a.name <=> b.name}