2011-07-03 4 views
3

У меня есть строка "001-1776591-7", и я хочу разделить ее на 3 части, "-" является параметром split.Как разбить строку на три части?

Я уже создал два метода для первого и последнего, но как насчет второй части строки, как я могу ее получить?


Дополнительная информация:

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

def serie 
     @serie || cedula.to_s.split('-').[0] : @serie 
    end 

    def identificador 
     @identificador || cedula.to_s.split('-').[1] : @identificador 
end 

def verificador 
     @verificador || cedula.to_s.split('-').[2] : @verificador 
end 


SyntaxError in TecnicosController#index 

/home/lurraca/Desktop/rails_project/ArLink/app/models/tecnico.rb:7: syntax error, unexpected '[' 
      @serie || cedula.to_s.split('-').[0] : @serie 
             ^
/home/lurraca/Desktop/rails_project/ArLink/app/models/tecnico.rb:11: syntax error, unexpected '[' 
...dor || cedula.to_s.split('-').[1] : @identificador 
...       ^
/home/lurraca/Desktop/rails_project/ArLink/app/models/tecnico.rb:15: syntax error, unexpected '[' 
      @verificador || cedula.to_s.split('-').[2] : @verificador 
+1

Обратите внимание, что синтаксическая ошибка указывает на '' [''как неожиданную. Индексы в массивы не используют формат '. []', Вместо этого они должны быть '[]'. –

ответ

8

Метод split возвращает массив, поэтому вы можете получить доступ ко второму его элементу так же, как вы получите второй элемент любого другого массива: array[1]. Кроме того, использование бара || может сделать ваш код более простым. Попробуйте это:

def serie 
    @serie || cedula.to_s.split('-')[0] 
end 

def banana 
    @banana || cedula.to_s.split('-')[1] 
end 

def verificador 
    @verificador || cedula.to_s.split('-')[2] 
end 
+0

Благодарим вас за подробный ответ. Я добавил дополнительную информацию к моему оригинальному вопросу, надеюсь, что вы сможете помочь с этим. –

+0

Вы получаете синтаксические ошибки, потому что вы точно не копировали мой код! Не должно быть периода до '['. –

+0

Как насчет использования '|| =' здесь для сохранения результатов для последующих вызовов? –

4
cedula.to_s.split('-')[1] 

split возвращает массив ,

1
cedula.to_s.split('-')[0] is the same as cedula.to_s.split('-').first 

cedula.to_s.split('-')[1] is the second part of your string 

cedula.to_s.split('-').last is the last part in this case the third which can be accessed  via: cedula.to_s.split('-')[2] as well 


> cedula.to_s.split('-') 
=> ["001", "1776591", "7"] 

Split разбивает строку в массив. Элементы массива можно получить следующим образом:

массив [0], массив [1] и т.д. ...

Массив начинается с 0.

9

Почему бы не установить их все сразу?

@serie, @identificador, @verificador = cedula.split('-') 

Вы можете сделать их атрибуты через attr_accessor или attr_reader, если вы все еще хотите получить доступ к ним с помощью методов.

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