所以我是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工作!感谢每个人!
答案 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)