Ruby on rails RubyonRails中的呈现验证错误
在model say任务中,我有以下验证Ruby on rails RubyonRails中的呈现验证错误,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-plugins,Ruby On Rails,Ruby On Rails 3,Ruby On Rails Plugins,在model say任务中,我有以下验证 validates_presence_of :subject, :project, :user, :status 如何使用其他控制器呈现这些验证的错误消息 在我使用的CustomController内部 Task.create(hash) 在散列中传递nil值会产生以下错误 ActiveRecord::RecordInvalid in CustomController#create Validation failed: Subject can
validates_presence_of :subject, :project, :user, :status
如何使用其他控制器呈现这些验证的错误消息
在我使用的CustomController内部
Task.create(hash)
在散列中传递nil值会产生以下错误
ActiveRecord::RecordInvalid in CustomController#create
Validation failed: Subject can't be blank
控制器的创建操作中的代码
@task = Task.create(hash)
if @task.valid?
flash[:notice] = l(:notice_successful_update)
else
flash[:error] = "<ul>" + @task.errors.full_messages.map{|o| "<li>" + o + "</li>" }.join("") + "</ul>"
end
redirect_to :back
@task=task.create(散列)
如果@task.valid?
flash[:notice]=l(:notice\u successful\u update)
其他的
flash[:error]=“”+@task.errors.full_messages.map{o}“- “+o+”
”}.join(“”+”
”)
结束
重定向到:返回
如何向用户呈现错误消息
任务模型已经建立,它呈现正确的消息。我想从插件中使用它的功能。 如果你在编辑页面(即:表单)中显示错误,那么考虑GEM的用法。它将为您显示错误,而不需要一行代码。只需将的表单替换为的简单表单,魔术就开始了…这应该会起作用
<%= form_for(@task) do |f| %>
<% if @task.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@task.errors.count, "error") %> prohibited this task from being saved:</h2>
<ul>
<% @task.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
禁止保存此任务:
您能推荐其他解决方案吗?这不需要安装Gem,我发布的是错误消息的作用。它在轨道上被移除3@stellard,我知道这件事。我只是看不到任何宝石的替代品。而的error\u messages\u不仅被删除,而且被放在一个单独的gem()中。所以我认为作者注定要使用gems,除非他想在构建表单时头痛。@jdoe注定是非常极端的,我认为。。。人们可以很容易地将我发布的内容转换为助手,并在所有表单上使用它。他们还可以自定义样式,如果使用gem,这将更加困难。@stellard,同意你最后的评论。你可以把它变成一个助手,用于复制旧的错误消息以实现功能OK。我要试试这个。我想使用“error\u messages\u for”,因为我正在开发redmine插件,redmine似乎使用了“error\u messages\u for”。error\u messages\u for
可用。但您必须使用此gem:@stellard,我尝试了您的解决方案,但我仍然在CustomController中遇到错误ActiveRecord::RecordInvalid#创建验证失败:主题不能为空是因为我正在从其他(即不是taskscontroller)控制器调用create方法吗?您还在这个创建操作中保存了两次。create会保存它,然后你再保存一次。哦!谢谢你提醒我。@stellard,用适合我的解决方案更新了帖子。我想这是一个不错的方法。请评论?我绝对不会在控制器中放置任何html。这应该在视图中,只有消息文本应该在控制器中。它不遵循rails的惯例,但在不涉及更多细节的情况下,一般来说还可以。