我的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
(但我需要这个因为我希望用户能够为该帐户创建一个新用户。有人可以告诉我这是什么产生的吗?
答案 0 :(得分:9)
错误确实发生在该行上,因为ActiveRecord模型默认情况下不实现可比较。所以,当你说@account.users.sort!
时,排序就会爆炸,因为它无法将用户与用户进行比较。
你可以在这里做两件事:
为您的用户模型实施比较运算符。查看this link有关如何操作的博客文章,但它类似于:
class User < ActiveRecord::Base
def <=>(other)
self.name <=> other.name
end
end
直接告诉排序要使用的比较,如下所示:
@account.users.sort! {|a, b| a.name <=> b.name}