【问题标题】:Rails 3.2: Validation in a single line for all the fields with fieldnameRails 3.2:在一行中验证所有具有字段名的字段
【发布时间】:2014-05-13 05:39:55
【问题描述】:

我有一个名为视频的模型。该模型包含 5 个属性。所有字段均为必填项。我想为 1 行的所有字段编写验证。错误消息应该类似于“field_name 不能为空”

 validates :acodec,:vprofile,:vbitrate,:vwidth,:audio_volume, :presence => {:message=>" can't be blank"}

截至目前,它会给出“不能为空白”之类的错误消息。但我想要它的字段名称。如果您有任何想法或建议,请分享。

更新

html页面:

 <%= validation_errors @video.errors['acodec']%>

【问题讨论】:

  • 相反,您可以设置像These mandatory fields can't be blank 这样的消息。这很有意义。
  • 在我必须显示的每个文本框的表单中,字段名不能为空。无论如何,模型本身是否可以做到这一点?
  • 您总是希望“字段名不能为空”吗?还是你想要“acodec cant be blank”?
  • 我希望编解码器不能出错
  • 如果您使用simple_formformtastic 它会显示每个字段的错误,因此不需要显示字段名称(因为每个错误字段都指定了原因,并且是也以图形方式显示(红色)。无论如何:您能告诉我们validation_errors 的定义或它来自哪个宝石吗?我猜它是您的rails 应用程序中的一种方法?

标签: ruby-on-rails ruby validation ruby-on-rails-3.2


【解决方案1】:

确保您的表单与此类似:

<%= form_for(@video) do |f| %>
  <% if @video.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@video.errors.count, "error") %> prohibited this video from being saved:</h2>

      <ul>
      <% @video.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :acodec %><br>
    <%= f.text_field :acodec %>
  </div>
  ...
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

模型验证如下:

validates :acodec,:vprofile,:vbitrate,:vwidth,:audio_volume, presence: true

还有videos_controller:

def new
  @video = Video.new
end

def create
  @video = Video.new(video_params)

  respond_to do |format|
    if @video.save
      format.html { redirect_to @video, notice: 'Post was successfully created.' }
    else
      format.html { render :new }
    end
  end
end

这 100% 有效!

【讨论】:

  • 你的 html 是什么样的?请将代码添加到您的问题中。
  • 在错误信息中,消息不能为空。它不包括字段名称
  • 我的问题是在模型中做所有事情
  • 你为什么要那个??
【解决方案2】:

Presence :此帮助程序验证指定的属性不为空。它使用空白?方法来检查值是 nil 还是空字符串,即一个空字符串或由空格组成的字符串。

validates :acodec,:vprofile,:vbitrate,:vwidth,:audio_volume, presence: true

请参考 Active Record Validation

的 Ruby 文档

编辑

试试这个 错误消息相关对象:

您可以添加与整个对象状态相关的错误消息,而不是与特定属性相关的错误消息。当您想说对象无效时,可以使用此方法,无论其属性的值如何。由于errors[:base] 是一个数组,你可以简单地在其中添加一个字符串,它将被用作错误消息。

class Video < ActiveRecord::Base
    def a_method_used_for_validation_purposes
        errors[:base] << "This Video is invalid because ..."
    end
end

更新

如果您希望字段名称出错,那么您必须编写如下内容:

validates_presence_of :acodec,:vprofile,:vbitrate,:vwidth,:audio_volume,  :message => "Your Field Name can't be blank"

仍然没有得到您的解决方案,那么我建议您尝试 client-side-validation gem

【讨论】:

  • 对于单列,我们可以这样做。但我想为多列做
  • @poojaagarwal : 你可以通过用逗号分隔另一个属性来做到这一点
猜你喜欢
  • 2012-02-09
  • 2022-01-09
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多