Модифицировать строки в Rails? - PullRequest
2 голосов
/ 14 апреля 2010

Итак, я новичок в Rails (учусь на старших курсах в старшей школе) и пытаюсь понять, как изменить эти строки.

Допустим, кто-то пишет в форме следующую строку: «Вы знаете, что вы гик, когда»

Как я могу автоматически изменить это на: "Вы знаете, что вы гик, когда ..."?

Мне нужно, чтобы Rails проверил регистр первой буквы и проверил наличие трех точек, а затем изменил строку при необходимости. Я посмотрел здесь , но не могу найти ничего, что сработало бы.

Большое спасибо!

РЕДАКТИРОВАТЬ: Я пытаюсь реализовать то, что предложил Рубен Маллаби, но у меня проблемы. Вот соответствующая часть файла lists_controller.rb, а ниже - метод в модели list.rb.

def update
  @list = List.find(params[:id])
  @list.fixlistname
  respond_to do |format|
    if @list.update_attributes(params[:list])
      flash[:notice] = 'List was successfully updated.'
      format.html { redirect_to(@list) }
      format.xml  { head :ok }
    else
      format.html { render :action => "edit" }
      format.xml  { render :xml => @list.errors, :status => :unprocessable_entity }
    end
  end
end

и ..

def fixlistname
  new_title = title.humanize + (title.ends_with("...") ? "" : "...")
end

РЕДАКТИРОВАТЬ 2: Я хочу, чтобы строка была изменена до того, как она попадет в базу данных, и вот сообщение об ошибке, которое я получаю:

неопределенный метод "заканчивается_свойством" для вас знаю, что ты бегун когда ": String

ПОЛУЧИЛ ЭТО РАБОТАЕТ! СПАСИБО ВСЕМ!

Ответы [ 4 ]

3 голосов
/ 14 апреля 2010

Вы можете использовать humanize, чтобы удостовериться, что первая буква прописная, а конец - с? ("...") для проверки трех точек

new_string = my_string.humanize + (my_string.ends_with?("...") ? "" : "...")
1 голос
/ 14 апреля 2010

Просто подсказка, но когда вы выполняете «разрушительные» операции (операции, которые изменяют вызывающий объект), вы должны добавить восклицательный знак (!) В конце имени метода.Это просто соглашение, но оно определенно повышает удобочитаемость и уменьшает количество неожиданных ошибок позже.

Итак, в вашем контроллере вы должны иметь:

@list.fixlistname!

и в вашей модели вы получите:

def fixlistname!
  new_title = title.humanize + (title.ends_with?("...") ? "" : "...")
end

См. здесь для получения дополнительной информации.

0 голосов
/ 14 апреля 2010

Строка # заглавные буквы будут заглавными буквами первой буквы строки:

"you know you are a geek when".capitalize # => "You know you are a geek when"

И может получить последние три символа строки, используя String # [] :

"you know"[-3,3]             # => "now"
"you know..."[-3,3]          # => "..."

"you know..."[-3,3] == "..." # => true

Rails также предоставляет хороший ярлык для этого в виде String # end_with? :

"you know...".ends_with?("...") # => true

Таким образом, вы можете проверить конец строки, и если это не «...», вы можете добавить «...»:

dots = "..."
my_str = "you know you are a geek when"

my_str = my_str + dots unless my_str.ends_with? dots
# => "you know you are a geek when..."

my_str.capitalize!
puts my_str
# => "You know you are a geek when..."

Один крайний случай, который вы можете рассмотреть, если строка заканчивается точками, но не тремя из них. Например, как вы будете обрабатывать строку типа «вы знаете ..» (вышеупомянутый метод сделает это «вы знаете .....») или «вы знаете .....» (вышеизложенное оставит это без изменений )

0 голосов
/ 14 апреля 2010

Способ проверки и изменения строк с помощью ruby ​​заключается в использовании регулярных выражений. Вы можете прочитать о них здесь и научиться использовать их по адресу Rubular

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