将所有条目标记为form_for文本字段

时间:2013-12-31 23:23:05

标签: ruby-on-rails ruby form-for

尝试对来自form_for字段的所有条目进行title-case,以便它们一致进入数据库进行搜索。

这是我的搜索字段(作为部分创建的文件):

<%= form_for @airport do |f| %>  
Input city  
<%= f.text_field :city, :value => f.object.city.titlecase %>  
Input country  
<%= f.text_field :country, :value => f.object.country.titlecase %>  
<%= f.submit %>  
<% end %>

但是当我运行它时,我得到一个NoMethodError:

undefined method 'titlecase' for nil:NilClass

我从this post开始对.object.city.titlecase进行了说明。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您不希望在视图中规范化数据 - 如果用户更改了提交的数据,该怎么办?相反,您可以使用before_save(或before_validation)回调在模型中处理它。以下是与您的模型相关的代码示例:

class Place < ActiveRecord::Base
  before_save do |place|
    place.city = place.city.downcase.titleize
    place.country = place.country.downcase.titleize
  end
end

您还可以查看the Ruby on Rails guide了解详情。


更直接地回答你的问题,这样的事情会起作用:

<%= f.text_field :city, :value => (f.object.city ? f.object.city.titlecase : '') %>  

这只是意味着如果f.object.city存在,则显示titlecase版本,如果它不显示空白字符串。