模型未验证

时间:2012-01-07 13:23:46

标签: ruby-on-rails ruby ruby-on-rails-3 acts-as-taggable-on

我已尝试设置表单验证,以确保表单中必须包含至少1个且最多3个标记。但它仍然没有工作,因为仍然处理空表单,但正确验证了带有4个逗号分隔标记的表单。

控制器

def update
  @product = Product.find(params[:id])
  current_user.tag(@product, :with => params[:product][:tag_list], :on => :tags)
  if @product.update_attributes(params[:product])
    redirect_to :root, :notice => "Added"
  else
    render :action => 'edit'
  end
end

表格

<%= form_for @product do |f| %>
  <%= f.label :tag_list, "Your tags" %> <%= f.text_field :tag_list, :value => @product.tags_from(current_user) %>
  <p><%= f.submit "Change" %></p>
  <%= f.error_messages %>
<% end %>

模型

validate :required_info
validates_size_of :tag_list,
                  :maximum => 3

private

  def required_info
    if( tag_list.empty? and description.empty? )
      errors.add_to_base "Add one"
    end
  end

2 个答案:

答案 0 :(得分:1)

您可以使用自定义验证:

validates :tag_list_length

private

def tag_list_length
   errors.add(:tag_list, "Must include at least one and no more than three tags") unless tag_list.length.between?(1,3)
end

答案 1 :(得分:0)

if( tag_list.empty? and description.empty? )
  errors.add_to_base "Add one"
end

只是看一下模型的这一部分,我认为你宁愿做if(tag_list.empty? or description.empty?),因为你希望它们都被填充。

对于第二次验证,我不是act_as_taggable用户,所以我现在无法回复你。