对于我的应用程序,用户可以通过用户自己的显示页面上的simple_form创建帖子。我在帖子模型中验证了要求存在是真的。如果没有输入,而不是收到错误通知告诉我我的字段是空白的,我得到ActiveRecord :: RecordInvalid,验证失败。
如何让它在表单上创建错误通知告诉我一个字段是空白的?
请参阅下面的代码。
user.rb
has_many :posts
post.rb
attr_accessible :user_id, :category
belongs_to :user
validates :category, presence: true
查看/用户/ show.html.erb
<%= render 'posts/form' %>
查看/帖/ _form.html.erb
<p>Add Post:</p>
<%= simple_form_for([@user, @user.posts.build]) do |f| %>
<%= f.error_notification %>
<%= f.input :category %>
<%= f.submit "Add Post", :class => "btn btn-header" %>
<% end %>
posts_controller.rb
def create
@user = User.find(params[:user_id])
@post = @user.posts.build(params[:post])
respond_to do |format|
if @post.save
format.html { redirect_to user_path(@user), notice: 'Post was successful.' }
format.json { head :no_content }
else
format.html { redirect_to user_path(@user) }
format.json { render json: @post.user.errors, status: :unprocessable_entity }
end
end
end
答案 0 :(得分:2)
@post = @user.posts.create!(params[:post])
是问题所在。 create!
方法验证您尝试创建的模型,然后在验证失败时引发异常。
你应该这样做:
@post = @user.posts.build(params[:post])
if @post.save
# do some good stuff
else
# do some bad stuff
end
这不会引发任何异常,并且会按照您的意愿运行。如果您想显示出错信息,则必须render :new
代替{{1}}