`
up2u0609
  • 浏览: 16469 次
社区版块
存档分类
最新评论

在rails3真正到来之前,写一个小东西,yy一下在非ar类里调用validation

阅读更多
实际是在工作过程中假公济私的一个即兴滥涂。
在2.3.5里通过了,其他版本就不知道了。
module StubActiveRecord
  class Base
    def save
      return valid?
    end
    def save!;end
    def new_record?;false;end
    def update_attribute;end
    def self.human_name;"#{self.name.underscore}";end
    def self.human_attribute_name(col)
      "#{self.name.underscore}.#{col}"
    end
    def self.self_and_descendants_from_active_record;[self];end
  #stub methods above
    include ActiveRecord::Validations
    def initialize(params={})
      @errors = ActiveRecord::Errors.new(self)
    end
  end
end

require 'stub_active_record/base'
class UserRemote < StubActiveRecord::Base
  NECESSARY_ATTR = [:name]
  attr_accessor *NECESSARY_ATTR
  validates_presence_of *NECESSARY_ATTR
  validate :validate_via_api
  def initialize(params={})
    super
    NECESSARY_ATTR.each do|attr|
      instance_variable_set(:"@#{attr}", params[attr])
    end
  end
protected
  def validate_via_api
    # add other errors here.
  end
end

class UsersController < ApplicationController
  def new 
    @user = UserRemote.new
  end
  def create
    @user = UserRemote.new(params[:user_remote])
    if @user.save
      #blablabla
    else
      render :action => 'new'
    end
  end
end

<% form_for @user do |form| %>  
 <%= form.error_messages %>
 <%= form.text_field :name %>
<% end %>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics