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

Bet*_*rds 2 ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.1

我的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
Run Code Online (Sandbox Code Playgroud)

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

<%= 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 %>
Run Code Online (Sandbox Code Playgroud)

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

Ver*_*cus 9

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

你可以在这里做两件事:

  1. 为您的用户模型实现比较运算符.查看此链接以获取有关如何操作的博客文章,但它类似于:

    class User < ActiveRecord::Base
    
      def <=>(other)
        self.name <=> other.name
      end
    
    end
    
    Run Code Online (Sandbox Code Playgroud)
  2. 直接告诉排序使用什么比较,如下所示:

    @account.users.sort! {|a, b| a.name <=> b.name}
    
    Run Code Online (Sandbox Code Playgroud)

  • 我有一段时间没有听过"轰炸"这句话,但我仍然喜欢它. (3认同)