Rails если оператор с помощью include?метод выдачи синтаксиса или строкового литерала - PullRequest
0 голосов
/ 10 сентября 2018

В моем приложении RoR я пытаюсь создать метод, который будет смотреть на текстовое поле (тело) и публиковать сообщение, чтобы расслабиться, если был предоставлен общий номер мобильного телефона в Великобритании. Я проверяю номер мобильного телефона в Великобритании, выполняя поиск по номеру 07 или '+447' в любом месте основного текста.

  def contact_details_shared
    if self.body.include? '07' || self.body.include? '+447'
      slack_post(self)
    end
  end

Это выдает следующую ошибку при попытке запустить приложение на локальном хосте (например, rails s):

syntax error, unexpected tSTRING_BEG, expecting keyword_then or ';' or '\n'

Но я не вижу здесь никаких проблем с синтаксисом.

Так что я тоже попробовал следующее

  def contact_details_shared
    if ( self.body.include? '07' || self.body.include? '+447' )
      slack_post(self)
    end
  end

Это выдает следующую ошибку при попытке запустить приложение на локальном хосте (например, rails s):

warning: string literal in condition

Я был удивлен этим, потому что мой код должен возвращать логическое значение для каждого условия ИЛИ (не строки).

Итак ... два вопроса: 1) Как я могу заставить код работать? 2) Я думаю, что есть решения, которые в целом более элегантны, чем мои. Предложения очень приветствуются! Есть идеи?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018
    See this magic:

    Ex: "hello07".include? '07'

    return true

    when you use

    "hello07".include? '+441'

    returns false

    "hello07".include? '07' || "hello07".include? '+441'

    SyntaxError: (irb):39: syntax error, unexpected tSTRING_BEG, expecting end-of-input
    "hello07".include? '07' || "hello07".include? "+441"

                                                ^
    if you use "or" instead of ||

     "hello07".include?'07' or "hello07".include?'+447'
    returns true


    if you want to work your code, you can use

    if self.body.include?('07') or self.body.include?('+447')


    the solution is use "or" instead of "||"

if you want use the "||" use this syntax
if (self.body.include?'07') || (self.body.include?'+447')
0 голосов
/ 10 сентября 2018

Попробуйте:

if self.body.include?('07') || self.body.include?('+447')

Я подозреваю, что ruby ​​нуждается в явной идентификации аргументов (т. Е. '07' и '+447'), предоставленных с помощью скобок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...