2011-02-09 13 views
5

Tôi có một form_for và tôi muốn rằng bất kỳ giá trị bên trong x.textField xuất hiện với chữ cái đầu tiên trong upcase (Tôi đang nói về lần sửa đổi nơi textfield được điền sẵn bởi các giá trị db).hoa f.text_field

Trả lời

6

Bạn có thể tận dụng nó như thế này:

<%= form_for ... do |f| %> 
    <%= f.text_field :name, :value => f.object.name.capitalize %> 
2

giải pháp Pan Thomakos sẽ làm việc, nhưng nếu bạn không muốn phải thêm :value => f.object.name.capitalize tới mọi lĩnh vực văn bản trên biểu mẫu, bạn có thể nhìn vào văn bản của bạn của riêng FormBuilder.

Đặt một nơi nào đó trong đường dẫn tải của bạn, như lib/capitalizing_form_builder.rb

class CapitalizingFormBuilder < ActionView::Helpers::FormBuilder 

    def text_field(method, options = {}) 
    @object || @template_object.instance_variable_get("@#{@object_name}") 

    options['value'] = @object.send(method).to_s.capitalize 

    @template.send(
     "text_field", 
     @object_name, 
     method, 
     objectify_options(options)) 
    super 
    end 

end 

Cách sử dụng:

<% form_for(@post, :builder => CapitalizingFormBuilder) do |f| %> 

    <p> 
    <%= f.text_field :title %> 
    </p> 
    <p> 
    <%= f.text_field :description %> 
    </p> 
    <p> 
    <%= f.submit 'Update' %> 
    </p> 

<% end %> 
0

bạn cũng có thể làm điều này trong hành động tạo/cập nhật bộ điều khiển giống như như đưa ra dưới đây

def create 

    @user = User.new(params[:user]) 
    @user.name = params[:user][:name].capitalize 

    if @user.save 
    #do something 
    else 
    #do something else 
    end 

end 
+0

này không được khuyến khích, vì logic lĩnh vực chuyển đổi nên được đặt trong các mô hình: "điều khiển mỏng, mô hình chất béo" – caesarsol

+1

bạn là đúng nhưng đây để đơn giản ta vừa giải thích ý tưởng rằng làm thế nào bạn có thể tận dụng. đó là lý do tại sao nó tốt hơn để đặt mọi thứ lại với nhau như một bức tranh toàn bộ rằng những gì đang xảy ra! –

3

Bạn có thể thực hiện việc này bằng CSS ...

= f.text_field :some_attribute, style: 'text-transform: capitalize;'

Các vấn đề liên quan