2016-03-30 42 views
-2

Sürekli olarak bu can sıkıcı hatayı alıyorum ve çözemiyorum. Son zamanlarda aynı konu hakkında bir soru yayınladım ve verimli bir yardım aldım.undefined method nk için cliq_requests: NilClass

Kullanıcıların bir gruba katılmayı istemelerini istiyorum. Cliqs = Gruplar. Tüm konsol testlerim doğru görünüyor, ama benim sorunum için bir çözüm bulamıyorum. İlişkilendirme gösteriliyor, ancak güncelleştirme/kabul etme yöntemini çalıştırmaya gelemiyorum.

Bu beni delirtiyor! Bunu nasıl düzeltirim?

Benim Modeller:

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 

Benim denetleyicisi:

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 

Benim Görünüm:

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

My Yolları:

İşte

benim kodudur
resources :cliqs do 
    resources :cliq_requests 
end 
+0

Ne demek istiyorsunuz bu hatayı alıyorsunuz? – Pavan

+0

Satır 32: CliqRequestsController'da güncelleme. Nerede yazıyorsa "@cliq_request = @ cliq.cliq_requests.find_by (id: params [: id])". –

+0

Bu özel eylemle pek çok konfigürasyonu denemedim. Ayrıca bir dizi farklı rota da denedim. –

cevap

1

Bu satırlar biçim bozuklukları:

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

Sana yol yardımcıları [ör kullanmanızı tavsiye Becerikli yönlendirme kullanıyorsanız cliq_cliq_request_path(cliq, cliq_request)]. Yardım için komisyon rotalarını kullanabilirsiniz. :cliq_id ve :id ile ilgili gelişmeleri, geliştirme URL'lerinin bir parçası olarak görüyorsanız, bunun yerine sayıların olması gerekir. Dizeleri kendiniz de enterpolasyon yapabilirsiniz (ör. "/cliqs/#{cliq_id}/cliq_requests/#{cliq_request.id}"), ancak bu genellikle daha yazarak ve kesinlikle zamanla daha kırılgandır.

Sorunlarınızdan biri, bağlantıyı doğru şekilde oluşturmak için ihtiyacınız olan tüm verilere sahip olmayan bekleyen üye adları listesinden geçmeniz olabilir. Bu nedenle güncelleme işleminiz iyi çalışıyor olabilir, ancak doğru verileri iletmeyebilirsiniz. Ayrıca

bu satırı:

if @current_user = @cliq.owner 

bir atama olduğunu ve bu nedenle her zaman doğru dönecektir. Muhtemelen ==

+0

Yani "oluşturma" eylemi çalıştı. Gerekli tüm veriler veritabanına (cliq_id, user_id ve cliq_request_id) kalıcıydı. Neden güncelleme/yok etme yöntemi için çalışmıyor? –

+0

"Create" yöntemini çağıran kodu sağladığınızı sanmıyorum. Genellikle bu bir _form kısmi. –

+0

Güncelleme yönteminize bir 'param param [: id]' ya da 'params [: id] 'tuşunu kaldırmayı deneyin ve günlüğünüze ya da web tarayıcınıza bakın. Bir sayı yazıyorsa, bu cevap yanlış. Diyorsa: id, bunlar, döngüsünüzde yapmanız gereken değişiklik türleridir. (Bir kullanıcıyı bir cliq_request dosyasından almak kolay olduğu için, bekleyen üyeler yerine cliq_requests ile döngü yapmayı öneririm.) –