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
5
A
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
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;'
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
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! –