Проверка Rails с ActiveModel - PullRequest
       3

Проверка Rails с ActiveModel

1 голос
/ 04 февраля 2011

Я просматривал документацию для получения ActiveRecord проверки с ActiveModel.По какой-то причине я не вижу никаких результатов проверки.

У меня есть набор моделей, которые вместо взаимодействия с ActiveRecord взаимодействуют через пользовательский API, который будет находиться за Rails.

Модель:

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 %>

Я следую изложенному здесь коду: РельсыПроверка ActiveModel

Метод корректно возвращается в форму, поскольку @ apiObject.save возвращается как false, но ответ проверки не возвращается.Я проверил разметку, и обычные результаты проверки рельсов не возвращаются.Чего мне не хватает?

Ответы [ 2 ]

5 голосов
/ 04 февраля 2011

У меня похожий код, который работает, но у меня есть метод инициализации в моих классах. Возможно, ваша модель должна быть:

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

РЕДАКТИРОВАТЬ : добавлен вызов в действительный? в реализации сохранения, так что коллекция ошибок будет заполнена.

2 голосов
/ 04 февраля 2011

Это должно полностью ответить:

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

В двух словах: создайте форму с переменной экземпляра + добавьте необходимый код для отображения ваших ошибок.

...