2012-03-28 16 views
2

Ich erhalte den folgenden Fehler in meiner Rails-Anwendung:Rails Fehler: "Vergleich der Benutzer mit Benutzer fehlgeschlagen"

comparison of User with User failed

Der entsprechende Abschnitt meiner Controller wie folgt aussieht:

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 

der entsprechende Abschnitt meiner Sicht sieht das so:

<%= 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 %> 

der Fehler scheint um den for @user in @account.users.sort! Abschnitt nach dem Fehlermodell zu stammen, aber das Entfernen scheint es die Ergänzung der @account.users.build in der fields_for Abschnitt sein, die es erstellt (aber ich brauche dies, wie ich möchte der Benutzer in der Lage sein, einen neuen Benutzer für erstellen dieser Account. Kann mich jemand aufklären, was das bewirkt?

Antwort

9

Der Fehler tritt tatsächlich in dieser Zeile auf, da ActiveRecord-Modelle keine Vergleichswerte standardmäßig implementieren. Wenn Sie also sagen @account.users.sort!, bombardiert die Sorte, da es keine Möglichkeit gibt, Benutzer mit Benutzern zu vergleichen.

Es gibt zwei Dinge, die Sie hier tun können:

  1. Implementieren Sie den Vergleichsoperator für Ihr Benutzermodell. Check out this link für einen Blog-Post auf, wie es zu tun, aber es wäre so etwas wie:

    class User < ActiveRecord::Base 
    
        def <=>(other) 
        self.name <=> other.name 
        end 
    
    end 
    
  2. die Sortierung per eMail direkt, was Vergleich zu verwenden, wie folgt aus:

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

Ich habe den Ausdruck "Bomben" schon lange nicht mehr gehört, aber ich liebe es immer noch. – miked

+0

Es sieht so aus, als ob er nur nach absteigender ID sortiert, also '@ account.users.order ('id DESC')' ist wahrscheinlich der einfachste Weg, es zu tun. – James

+0

@veraticus - danke mann. Große Stackoverflow-Antwort -> richtig, prägnant und klar. –

Verwandte Themen