2016-03-30 20 views
-2

Ich bekomme diesen nervigen Fehler konsequent und ich kann es nicht lösen. Ich habe kürzlich eine Frage zum selben Thema gestellt und keine produktive Hilfe bekommen.undefined Methode `cliq_requests 'für nil: NilClass

Ich möchte, dass Benutzer anfordern, einer Gruppe beizutreten. Cliqs = Gruppen. Alle meine Konsolentests scheinen korrekt zu sein, aber ich kann keine Lösung für mein Problem finden. Die Zuordnung wird angezeigt, aber ich kann nicht scheinen, dass die update/accept-Methode ausgeführt wird.

Das macht mich verrückt! Wie behebe ich das?

Hier ist mein Code:

Meine Models:

class User < ActiveRecord::Base 
has_many :uploads 

has_one :owned_cliq, foreign_key: 'owner_id', class_name: 'Cliq', dependent: :destroy 

has_many :cliq_memberships, dependent: :destroy 
has_many :cliqs, through: :cliq_memberships 

has_many :cliq_requests, dependent: :destroy 
... 
end 


class Cliq < ActiveRecord::Base 
belongs_to :owner, class_name: 'User' 

has_many :cliq_memberships, dependent: :destroy 
has_many :members, through: :cliq_memberships, source: :user 

has_many :cliq_requests, dependent: :destroy        #cliq_request_sender 
has_many :pending_members, through: :cliq_requests, source: :user, foreign_key: 'user_id' 
end 


class CliqRequest < ActiveRecord::Base 
#from 
belongs_to :user 
#to 
belongs_to :cliq 

#validate :not_member 

#validate :not_pending 

def accept 
    cliq.members << pending_member 
    destroy 
end 
end 

Mein Controller:

class CliqRequestsController < ApplicationController 

def index 
    #incoming 
    #@cliq_requests_received = CliqRequest.where(cliq: cliq) 
    #outgoing 
    #@cliq_requests_sent = current_user.cliq_requests 
end 

def show 
end 

def create 
    cliq = Cliq.find_by(params[:id]) 
    @cliq_request = current_user.cliq_requests.new(cliq: cliq) 


    if @cliq_request.save 
     redirect_to current_user #change to cliqs/cliq path later 
    else 
     redirect_to cliq_path 
    end 
end 

def update 
    @cliq = Cliq.find_by(id: params[:cliq_id]) 
    @cliq_request = @cliq.cliq_requests.find_by(id: params[:id]) 
    @cliq_request.accept 
end 

def destroy 
    @cliq_request.destroy 
end 
end 

Meine Ansicht:

<h1><%= @cliq.name %></h1> 

<%= link_to 'Request to join Cliq', '/cliqs/:cliq_id/cliq_requests', :method => :post %> 

<% @cliq_members.each do |cliq_member| %> 
<ul><%= link_to cliq_member.username, user_path(cliq_member) %></ul> 
<% end %> 

<% if @current_user = @cliq.owner %> 
<% @cliq.pending_members.each do |pending_member| %> 
<ul><%= link_to pending_member.username, user_path %> 
<%= link_to "Accept", "/cliqs/:cliq_id/cliq_requests/:id/", :method => :put %> 
<%= link_to "Deny", "/cliqs/:cliq_id/cliq_requests/:id/", :method => :delete %> 
</ul> 
<% end %> 
<% end %> 

Meine Routen:

resources :cliqs do 
    resources :cliq_requests 
end 
+0

Bei welcher Zeile erhalten Sie diesen Fehler? – Pavan

+0

Zeile 32: in Update auf dem CliqRequestsController. Wo steht "@cliq_request = @ cliq.cliq_requests.find_by (id: params [: id])". –

+0

Es sollte beachtet werden, dass ich zahlreiche Konfigurationen mit dieser bestimmten Aktion vergeblich versucht habe. Ich habe auch verschiedene Routen ausprobiert. –

Antwort

1

Diese Zeilen erscheinen malformed:

<%= link_to 'Request to join Cliq', '/cliqs/:cliq_id/cliq_requests', :method => :post %> 
<%= link_to "Accept", "/cliqs/:cliq_id/cliq_requests/:id/", :method => :put %> 
<%= link_to "Deny", "/cliqs/:cliq_id/cliq_requests/:id/", :method => :delete %> 

Ich empfehle Ihnen Weg Helfer verwenden [z cliq_cliq_request_path(cliq, cliq_request), wenn Sie ein findiges Routing verwenden]. Sie können Rake-Routen für Hilfe verwenden. Wenn Sie in Ihrer Datei "development.log" oder in der Datei "test.log" als Teil der gefundenen URLs beispielsweise :cliq_id und und :id sehen, sollten diese Zahlen sein. Sie können die Strings auch selbst interpolieren (z. B. "/cliqs/#{cliq_id}/cliq_requests/#{cliq_request.id}"), aber das ist normalerweise mehr Tipparbeit und im Laufe der Zeit sicherlich fragiler.

Eines Ihrer Probleme kann darin bestehen, dass Sie eine Liste mit ausstehenden Mitgliedsnamen durchlaufen, die nicht alle Daten enthält, die Sie zum korrekten Erstellen der Verknüpfung benötigen. So funktioniert Ihre Update-Aktion möglicherweise einwandfrei, aber Sie können nicht die richtigen Daten übergeben.

Auch diese Zeile:

if @current_user = @cliq.owner 

ist eine Zuordnung, und so wird immer wahr zurück. Vermutlich meinst du ==

+0

Also die Anfrage "create" Aktion hat funktioniert. Alle erforderlichen Daten wurden in der Datenbank gespeichert (cliq_id, user_id und cliq_request_id). Warum funktioniert es nicht für die update/destroy-Methode? –

+0

Ich glaube nicht, dass Sie den Code geliefert haben, der die 'create' Methode aufruft. Normalerweise ist das in einer _form teilweise. –

+0

Versuchen Sie, eine 'puts params [: id] 'oder' raise params [: id] 'in Ihre Update-Methode einzufügen und schauen Sie in Ihr Logbuch oder Ihren Webbrowser. Wenn es eine Zahl sagt, ist diese Antwort falsch. Wenn es heißt: id, sind dies die Arten von Änderungen, die Sie in Ihrer Schleife vornehmen müssen. (Ich würde empfehlen, cliq_requests durchzugehen, anstatt ausstehende Mitglieder, da es einfach ist, einen Benutzer von einer cliq_request zu bekommen.) –

Verwandte Themen