Jer*_* B. 1 validation ruby-on-rails activemodel ruby-on-rails-3
我一直在阅读文档以获得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
Run Code Online (Sandbox Code Playgroud)
控制者:
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
Run Code Online (Sandbox Code Playgroud)
表格:
<%= form_for :api_object, :url => '/apiobjectcontroller/' do |f| %>
<%= f.label :fieldName, 'Field Name' %>
<%= f.text_field :fieldName %>
<%= f.submit 'Create'%>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我遵循这里列出的代码:Rails ActiveModel验证
该方法正确返回到表单,因为@ apiObject.save返回false,但没有返回验证响应.我已经检查了标记,并且没有返回通常的rails验证结果.我错过了什么?
我有类似的代码,但我的类中有一个初始化方法.也许你的模型应该是:
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
Run Code Online (Sandbox Code Playgroud)
如果上面的工作,并且你最终在初始化程序中分配了很多属性,那么你可以使用这个老技巧:
def initialize(attributes = {})
attributes.each do |name, value|
instance_variable_set "@#{name}", value
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:添加了有效的电话?在保存实现中,以便填写错误集合.