我在 RoR 应用程序中有一个使用 simple_form 构建的提交表单。当字段为空时,应用程序仍会进入下一步,不会提示错误或警告。这些字段应该是默认的required: true
;但即使手动编写也不起作用。
该应用程序有 3 个步骤:NewPost(新视图)-> Preview(创建视图)-> Post。
通过我的控制器和视图的摘录会更清楚:
def new
@post= Post.new
end
def create
@post = Post.new(params.require(:post).permit(:title, :category_id))
if params[:previewButt] == "Continue to Preview your Post"
render :create
elsif params[:createButt] == "OK! Continue to Post it"
if @post.save!
redirect_to root_path
else
render :new
end
elsif params[:backButt] == "Make changes"
render :new
end
end
My New查看(摘录):
<%= simple_form_for @post do |form| %>
<%= form.input :title, input_html: { class: 'post-title-input' }, label: false, hint: '"Your post title"' %>
<%= form.collection_radio_buttons(:category_id, Category.all, :id, :name, :item_wrapper_class => "selectable" ) %>
<%= form.button :submit , name: "previewButt", value: "Continue to Preview your Post", class: "btn btn-lg btn-primary btn-preview" %>
<% end %>
My Create查看(摘录):
<%= simple_form_for @post do |form| %>
<%= form.hidden_field :title, {:value => @post.title} %>
<%= form.hidden_field :category_id, {:value => @post.category_id} %>
<% end %>
请注意,问题不在于保存时,模型定义仍然有效,问题仅出现在 simple_form 中。
class Post < ActiveRecord::Base
belongs_to :category
validates :title, presence: true
validates :category_id, presence: true
end
SOLUTION感谢迪基男孩 https://stackoverflow.com/users/1141264/dickieboy hint:
将控制器更改为:
def create
@post = Post.new(params.require(:post).permit(:title, :category_id))
if params[:previewButt] == "Continue to Preview your Post"
if @post.valid?
render :create
else
render :new
elsif params[:createButt] == "OK! Continue to Post it"
if @post.save!
redirect_to root_path
else
render :new
end
elsif params[:backButt] == "Make changes"
render :new
end
end