gpt4 book ai didi

ruby-on-rails - Rails - 简单的表单验证

转载 作者:行者123 更新时间:2023-12-04 04:56:08 25 4
gpt4 key购买 nike

对于我的应用程序,用户可以通过用户自己的显示页面上的 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 %>

post_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

最佳答案

@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相反(例如 http://blog.markusproject.org/?p=3313 )

关于ruby-on-rails - Rails - 简单的表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com