在Rails中修改字符串?

时间:2010-04-14 15:15:21

标签: ruby-on-rails string

所以我是Rails的新手(自学成为高中的高级项目),我正在试图弄清楚如何修改这些字符串。

假设有人在表单中写下以下字符串:“你知道自己是个极客”

我怎样才能自动将其更改为:“你知道在......时你是个极客?”?

我需要Rails检查第一个字母的大小写并检查三个点,然后根据需要修改字符串。我看了here,但我找不到任何可行的东西。

非常感谢!

编辑:我正在尝试实施Reuben Mallaby建议的内容,但我遇到了麻烦。这是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:我希望在进入数据库之前修改字符串,这是我收到的错误消息:

  

未定义的方法`ends_with'代表“你   知道你是一名田径运动员   当“:字符串

GOT IT工作!感谢每个人!

4 个答案:

答案 0 :(得分:3)

您可以使用humanize来确保第一个字母是大写的并且ends_with?(“...”)来检查三个点

new_string = my_string.humanize + (my_string.ends_with?("...") ? "" : "...")

答案 1 :(得分:1)

只是提示,但是当您执行“破坏性”操作(修改调用对象的操作)时,您应该在方法名称的末尾添加感叹号(!)。这只是一个惯例,但它肯定会提高可读性,并减少后来的惊喜。

所以在你的控制器中你会得到:

@list.fixlistname!

在您的模型中,您将拥有:

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

有关详细信息,请参阅here

答案 2 :(得分:0)

String#capitalize会将字符串的第一个字母大写:

"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#ends_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..."

但是,您可能要考虑的一个优势是,字符串以句点结尾,但不是三个。例如,你将如何处理像“你知道......”这样的字符串(上面的方法会使这个“你知道.....”)或“你知道......”(上面的内容会保持不变)?

答案 3 :(得分:-3)

使用ruby检查和修改字符串的方法是使用正则表达式。您可以阅读here,了解如何在Rubular

使用它们