论坛首页 编程语言技术论坛

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

浏览 2958 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (6)
作者 正文
   发表时间:2010-01-22   最后修改:2010-01-22
实际是在工作过程中假公济私的一个即兴滥涂。
在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