2016-04-12 78 views
1

我有一個控制器方法名稱process_message,它的目的是根據收到的消息對人員進行特定組簽名。現在一切正常,除非它會一遍又一遍地向同一組簽名。我正在嘗試添加一些快速代碼,以便他們只能註冊一次特定組。我認爲我已經搞清楚了,但是當我嘗試執行我寫的內容時,我遇到了一個錯誤。爲了清晰起見,我會顯示一些截圖和一些代碼。提出錯誤的控制器操作

這裏是我的控制器方法

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

我會避免把一個ifunless在同一行

這是你想要做什麼?

# 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

也許?我得到了一個未定義的方法「<<」for false:FalseClass' now – Bitwise

+0

已更新的答案。 –

+0

感謝您的幫助安東尼,但我仍然收到一個錯誤,說組是一個未定義的本地變量現在 – Bitwise

2

您在同一行中有ifunless。這給你的語法錯誤。

這裏的邏輯不清楚。 也許你想要的可以通過添加一個換行符來完成,這樣except語句就在if塊內而不是if條件中。

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

關於如何做到這一點的任何想法? – Bitwise