2016-04-12 4 views
1

У меня есть имя метода метода process_message, и его целью является подписание людей до определенных групп в зависимости от того, какое сообщение оно получает. Сейчас все работает отлично, за исключением того, что он снова и снова будет регистрировать человека в той же группе. Я пытаюсь добавить некоторый быстрый код, чтобы сделать это, чтобы они могли только подписываться на определенную группу один раз. Я подумал, что я понял это, но я получаю сообщение об ошибке, когда пытаюсь выполнить то, что я написал. Ill показать некоторые скриншоты и некоторый код для ясности.Действия контроллера, вызывающие ошибку

Вот мой метод контроллера

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 

Вы можете увидеть на 7-й линии у меня есть некоторый код, то, что я думал, что будет держать сообщение от подписания лицо два раза, но это не работает, и здесь сообщение об ошибке при запуске Rspec.

enter image description here

Я надеюсь, что моя проблема ясна, дайте мне знать, если вам нужно больше кода.

ответ

3

Я бы избежать положить if и unless на одной и той же линии

Это то, что вы пытаетесь сделать?

# 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

Может быть? Я получаю «неопределенный метод» << »для false: FalseClass' now – Bitwise

+0

Обновленный ответ. –

+0

Спасибо за помощь Энтони, но я все еще получаю сообщение об ошибке, в котором говорится, что группы - это неопределенная локальная переменная. – Bitwise

2

У вас есть if и unless в одной строке. Это дает вам синтаксическую ошибку.

Логика здесь не ясна. Возможно, что-то, что вы хотите, просто можно сделать, добавив новую строку, так что оператор if находится внутри if-блока, а не if-condition.

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

любые идеи о том, как я мог это сделать? – Bitwise

Смежные вопросы