我在rails中使用<%= form_for ...%>我想知道我需要做什么才能让用户在提交之前提交值?
我有输入字段,单选按钮和复选框。
<%= form_for @user, :html => {:multipart => true} do |f| %>
<%= f.text_field :textfield %>
<%= f.check_box :checkbox %>
<%= f.radio_button :radiobutton %>
<% end %>
如何告诉我的表单在提交之前需要填写或检查:textfield
,:checkbox
和:radiobutton
?
谢谢!
答案 0 :(得分:3)
使用model validations确保在保存后续模型之前存在这些属性:
您可以在验证级别上操作并传递要验证的属性:
# app/models/user.rb
validates_presence_of :textfield, :checkbox, :radiobutton # or whatever actual attribute names you choose
或者,您也可以指定为模型运行的验证(许多用户现在更喜欢这种方法):
# app/models/user.rb
validates :textfield, :presence => true # or `presence: true` in Ruby 1.9
validates :checkbox, :presence => true
validates :radiobutton, :presence => true
如果在提交时未填写任何这些属性,则会抛出save
上的错误,您可以通过渲染回自您提交的操作来处理错误。
# app/controllers/users_controller.rb
def create
user = User.new(params[:user])
if user.save
# handle if successful
else
flash[:message] = "Something did not validate" # if using flash messages
render :action => :new
end
end
ALTERNATIVE:
如果您确实想要在之前提交字段,则可以使用Javascript / jQuery验证库,例如jQuery.validationEngine。这些客户端库可以使您完全根据验证标准阻止表单提交 - 也就是说,如果验证失败,表单永远不会通过HTTP发布。
答案 1 :(得分:0)
您也可以使用clientide validation gem来实现此目的。看看它的git repo client_side_validation
在Gemfile中包含ClientSideValidations
gem 'client_side_validations'
然后运行安装生成器
rails g client_side_validations:install
这将安装初始化程序:
config/initializers/client_side_validations.rb
然后根据您的要求取消注释此文件中的某些行。 将其添加到您的application.js文件
//= require rails.validations
并将form_tag更改为:
<%= form_for @user, :validate => true do |f| %>