1

我一直在阅读文档以ActiveRecord使用ActiveModel. 出于某种原因,我没有看到返回任何验证结果。

我有一组模型,而不是与之交互,而是ActiveRecord通过位于 Rails 后面的自定义 API 进行交互。

该模型:

class ApiObject < ApiConnector
  include ActiveModel::Validations
  attr_accessor :fieldName

  validates :fieldName, :presence => true
  def save
    #save method implementation
  end
end

控制器:

def create
  @apiObject = ApiObject.new(params[:api_object])

  respond_to do |format|
    if @apiObject.save
      format.html { redirect_to(@apiObject, :notice => 'User was successfully created.') }
      format.xml  { render :xml => @apiObject, :status => :created, :location => @apiObject }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @apiObject.errors, :status => :unprocessable_entity }
    end
  end
end

表格:

<%= form_for :api_object, :url => '/apiobjectcontroller/' do |f| %>
    <%= f.label :fieldName, 'Field Name' %>
    <%= f.text_field :fieldName %>
    <%= f.submit 'Create'%>
<% end %>

我正在遵循此处列出的代码:Rails ActiveModel Validation

该方法正确返回到表单,因为 @apiObject.save 返回为 false,但没有返回验证响应。我检查了标记,没有返回通常的 rails 验证结果。我错过了什么?

4

2 回答 2

5

我有类似的代码可以工作,但我的类中有一个初始化方法。也许您的模型应该是:

class ApiObject < ApiConnector
  include ActiveModel::Validations

  validates :fieldName, :presence => true

  attr_accessor :fieldName

  def initialize(fieldName)
    @first_name = fieldName
  end

  def save
    return false unless valid?
    # save method implementation to go here
    # ...
    true # if save successful, otherwise, false
  end
end

如果上述方法有效,并且您最终在初始化程序中分配了很多属性,那么您可以使用这个旧技巧:

def initialize(attributes = {})
  attributes.each do |name, value|
    instance_variable_set "@#{name}", value
  end
end

编辑:添加了对有效的调用?在保存实现中,这样错误集合将被填写。

于 2011-02-04T19:37:45.987 回答
2

这应该完全回答:

http://asciicasts.com/episodes/211-validations-in-rails-3

简而言之:使用实例变量创建表单 + 添加必要的代码以显示错误。

于 2011-02-04T19:33:40.847 回答