2016-04-12 22 views
1

Bir denetleyici Metod ismim process_message var ve bunun amacı, hangi iletinin alındığına bağlı olarak insanları belirli gruplara imzalamaktır. Şu anda her şey iyi çalışıyor, ancak aynı gruba tekrar tekrar insan katacak. Bunu yapmak için biraz kod eklemeyi deniyorum, böylece yalnızca belirli bir gruba üye olabilirler. Bunu çözdüğümü düşündüm ama yazdıklarımı yapmaya çalıştığımda bir hata alıyorum. Bazı ekran görüntülerini ve bazı açıklık kodlarını göstereceğim. İşte Kumanda Eylem Bir Hatayı Yükseltme

benim denetleyicisi yöntemi

def process_message 
if message_params[:action] == 'subscribe' 
    # result = SubscribeToGroup.call(message_params) 
    # results.success? ? result.message : result.error 
    message_params[:id] = "visitor" if message_params[:id] == "tulip" # hack for now 
    @group = Group.find_by(name: message_params[:id])  
    if @group && @subscriber.groups << @group unless groups.include? (@group)            ^
    @group.response 
    else 
    'You cannot subscribe to unknown group' 
    end 
elsif message_params[:action] == 'stop' 
    # result = UnsubscribeToGroup.call(message_params) 
    # results.success? ? result.message : result.error 
    group_name = message_params[:id] 
    @group = @subscriber.groups.find_by(name: group_name) 
    @subscriber.groups.destroy(@group) if @group 
    "You are now unsubscribed from #{group_name.upcase} notifications. Text '#{group_name.upcase}' to start receieving updates again." 
else 
    "Sorry, we don't recognize that command." 
end 
rescue Exception => e 
"Something went wrong. Try again. #{e.message}" 
end 
Sen ben iki kez bir kişi kaydolarak mesajı tutmak düşündüm orada bazı kod var 7 hat üzerinde görebileceğiniz

ama burada olduğu çalışma ve edilmez Rspec çalıştırdığımda hata iletisi.

enter image description here

benim sorun artık kod gerekiyorsa bana bildirin açıktır umuyoruz.

cevap

3

Aynı hat

üzerinde if ve unless koyarak önleyeceğini bu yapmaya çalıştığın şey bu mu?

# You may have meant to provide `@subscriber.groups` instead of `groups` here. I'm not sure from information provided. 
unless groups.include?(@group) 
    @subscriber.groups << @group 
end 

if @group && @subscriber.groups.present? 
# ... 
+0

Belki? False için bir "undefined yöntemi" << "aldım: FalseClass' şimdi – Bitwise

+0

Güncelleme yanıtı. –

+0

Yardımlarınız için teşekkürler Anthony, ama hala bir hata olduğunu söyleyen grupların tanımlanamayan bir yerel değişken olduğunu şimdi – Bitwise

2

Tek satırda if ve unless var. Bu size sözdizimi hatası verir.

Mantık burada açık değil. Belki de istediğiniz bir satırsonu ekleyerek yapılabilir, böylece if-bloku if-bloğu içinde değilse ve if-condition'in içinde değil.

if @group.present? 
    @subscriber.groups << @group unless groups.include? (@group)             
    @group.response 
else 
    'You cannot subscribe to unknown group' 
end 
+0

Bunu nasıl yapabileceğime dair herhangi bir fikir var mı? – Bitwise