Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails中的呈现验证错误_Ruby On Rails_Ruby On Rails 3_Ruby On Rails Plugins - Fatal编程技术网

Ruby on rails RubyonRails中的呈现验证错误

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

在model say任务中,我有以下验证

 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的惯例,但在不涉及更多细节的情况下,一般来说还可以。