2016-06-16 12 views
-1

Ich versuche, herauszufinden, wie mit den Ideen in diesem Tutorial folgen:Rails 4 - Argument Fehler - scoped Einladung

https://coderwall.com/p/rqjjca/creating-a-scoped-invitation-system-for-rails

Ich bin stecken zu bleiben, wie Benutzer einladen. Ich habe ein Formular, um einen Benutzer einzuladen, der auf der Show-Seite arbeitet. Es funktioniert bis zu dem Punkt, wo ich send drücke. Dann bekomme ich einen Fehler, der sagt:

wrong number of arguments (given 1, expected 0) 

Ich weiß nicht, was ein Argument ist. Ich bin nicht sicher, was die eine Sache ist, die als gegebenes Argument bezeichnet wird und ich weiß nicht, was das System erwartet. Ich habe versucht herauszufinden, was ein Argument ist und ob ich versuchen muss herauszufinden, wie man die Erwartung erhöhen oder reduzieren kann, was immer es ist, das gegeben wurde, das gezählt wird.

Ich fand diesen Artikel, der versucht zu erklären, was ein Argument ist: http://www.skorks.com/2009/08/method-arguments-in-ruby/ aber von allen angegebenen Beispielen zeigt es keine Methode ohne ein Argument und es sagt nicht wirklich, was das Argument dort zu tun ist. Ich bin immer noch verwirrt.

Die Referenzen in der Fehlermeldung sind:

def existing_user_invite 
    mail(
     :subject => "You've been invited to join a team", 
     :to => '[email protected]', 
     :from => '[email protected]', 
     :html_body => '' 
     # :track_opens => 'true' 
    ) 
    end 

Es ist auch in meinem lädt zu dieser Linie bezieht Aktion erstellen:

def create 
     @invite = Invite.new(invite_params) 
     @invite.sender_id = current_user.profile.id 
     if @invite.save 
      InviteMailer.existing_user_invite(@invite).deliver 

      @invite.recipient.project.push(@invite.project) 
     else 
      #send new user email invitation to join as a user and then as part of this team 
      @invite.recipient.project.push(@invite.project) 

      # InviteMailer.new_user_invite(@invite, new_user_registration_path(:invite_token => @invite.token)).deliver 
     end 

     # oh no, creating an new invitation failed 

    end 

Das Tutorial Methode erstellen zeigt dies:

def create 
    @invite = Invite.new(invite_params) 
    @invite.sender_id = current_user.id 
    if @invite.save 

    #if the user already exists 
    if @invite.recipient != nil 

     #send a notification email 
     InviteMailer.existing_user_invite(@invite).deliver 

     #Add the user to the user group 
     @invite.recipient.user_groups.push(@invite.user_group) 
    else 
     InviteMailer.new_user_invite(@invite, new_user_registration_path(:invite_token => @invite.token)).deliver 
    end 
    else 
    # oh no, creating an new invitation failed 
    end 
end 

Ich finde es generell schwierig, Schienen oder Ruby-Ressourcen zu finden, die erklären, welche Komponenten sind. Ich Pinning meine vorherigen Fragen, mehr Hintergrund über das Problem bieten ich versuche zu lösen:

Rails 4 - Invite team mates to project

Rails 4 - Associations - adding team mates to teams

Invite_mailer.rb

class InviteMailer < ActionMailer::Base 
    # include Devise::Mailers::Helpers 


    def existing_user_invite(invite) 
    mail(
     :subject => "You've been invited to join a research project team", 
     :to => '[email protected]', 
     :from => '[email protected]', 
     :html_body => '' 
     # :track_opens => 'true' 
    ) 
    end 
end 

Antwort

0

falsche Nummer von Argumenten (gegeben 1, erwartet 0)

Sie haben existing_user_invite welche erwarten keine Argumente, aber Sie sind eine (existing_user_invite(@invite)). Wenn Sie dieser Methode ein Argument übergeben möchten, sollten Sie dies ändern, um ein Argument zuzulassen.

def existing_user_invite(invite) 
    mail(
    :subject => "You've been invited to join a team", 
    :to => '[email protected]', 
    :from => '[email protected]', 
    :html_body => '' 
    # :track_opens => 'true' 
) 
end 
+0

Hallo Pavan, ich habe das versucht, aber es führt zu einem Fehler, der sagt: "Stack-Level zu tief". Von dem, was ich entziffern kann, tritt dieser Fehler auf, weil der Code in einer Schleife steckenbleibt: Entweder eine Methode, die sich selbst aufruft, oder zwei Methoden, die sich gegenseitig aufrufen. Ich weiß nicht, was das bedeutet oder wie es passieren könnte, wenn man ein Argument hinzufügt. Ich werde versuchen, als nächstes mehr darüber zu erfahren. – Mel

+0

@Mel hat das nicht erwartet. Können Sie versuchen, den Argumentnamen in etwas anderes zu ändern .. wie 'def existing_user_invite (einladung)' – Pavan

+0

aber was bedeutet (einladung)? Ist es nur ein zufälliges Wort, das ich einfügen soll? – Mel

0

@ Pavan Antwort erklärt, warum Sie den ersten Fehler werden immer in

wrong number of arguments (given 1, expected 0)

Dann wird die zweite Frage ist, warum Sie bekommen die stack level too deep

Meine Vermutung ist existing_user_invite Methode ist die falsche Klasse.Sie kann es in Invite Modell zu haben, aber es sollte wirklich so gehen zu InviteMailer

versuchen

#app/mailers/invite_mailer.rb 
class InviteMailer < ApplicationMailer 

    # there may be other methods in this class too 

    def existing_user_invite(invite) 
    mail(
     :subject => "You've been invited to join a team", 
     :to => '[email protected]', 
     :from => '[email protected]', 
     :html_body => '' 
     # :track_opens => 'true' 
    ) 
    end 
end 

Bitte beachten Sie, dass existing_user_invite Methode 1 Argument (laden), die u von der Steuerung vorbei r. (wie @Pavan erwähnt)

Wenn Sie jedoch immer noch Probleme haben, bitte buchen Sie den Fehler vollständige Spur-Trace, so dass das Problem leichter zu lokalisieren. :)

+0

Hallo Sam, vielen Dank für einen Blick. Die Datei existed_user_invite (invite) befindet sich jedoch in der Datei invite_mailer.rb. – Mel