복붙노트

[RUBY-ON-RAILS] 데이터베이스없이 모델을 레일

RUBY-ON-RAILS

데이터베이스없이 모델을 레일

나는 레일 (2.1 및 2.2) 액티브 검증과 모델하지만, 데이터베이스 테이블없이를 만들려고합니다. 가장 널리 사용되는 방법은 무엇입니까? 나는이 기능을 제공 주장하는 몇 가지 플러그인을 찾았지만, 그들 중 많은 사람들이 널리 사용되거나 유지 될 나타나지 않습니다. 무엇 사회는 내가 추천입니까? 지금은이 블로그 게시물을 기반으로 내 자신의 해결책을 오는쪽으로 기울고 있어요.

해결법

  1. ==============================

    1.나는 당신이 연결되어있는 블로그 게시물이 이동하는 가장 좋은 방법이라고 생각합니다. 난 단지 코드를 오염하지 않는 모듈에 가지 메소드로 이동 건의 할 것입니다.

    나는 당신이 연결되어있는 블로그 게시물이 이동하는 가장 좋은 방법이라고 생각합니다. 난 단지 코드를 오염하지 않는 모듈에 가지 메소드로 이동 건의 할 것입니다.

  2. ==============================

    2.레일 3이 할 수있는 더 좋은 방법이있다 : http://railscasts.com/episodes/219-active-model

    레일 3이 할 수있는 더 좋은 방법이있다 : http://railscasts.com/episodes/219-active-model

  3. ==============================

    3.이것은 내가 과거에 사용했던 접근 방식입니다 :

    이것은 내가 과거에 사용했던 접근 방식입니다 :

    응용 프로그램 / 모델 / tableless.rb에서

    class Tableless < ActiveRecord::Base
      def self.columns
        @columns ||= [];
      end
    
      def self.column(name, sql_type = nil, default = nil, null = true)
        columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default,
          sql_type.to_s, null)
      end
    
      # Override the save method to prevent exceptions.
      def save(validate = true)
        validate ? valid? : true
      end
    end
    

    응용 프로그램 / 모델 / foo.rb에서

    class Foo < Tableless
      column :bar, :string  
      validates_presence_of :bar
    end
    

    스크립트 / 콘솔에서

    Loading development environment (Rails 2.2.2)
    >> foo = Foo.new
    => #<Foo bar: nil>
    >> foo.valid?
    => false
    >> foo.errors
    => #<ActiveRecord::Errors:0x235b270 @errors={"bar"=>["can't be blank"]}, @base=#<Foo bar: nil>>
    
  4. ==============================

    4.이제 더 쉬운 방법이 있습니다 :

    이제 더 쉬운 방법이 있습니다 :

    class Model
      include ActiveModel::Model
    
      attr_accessor :var
    
      validates :var, presence: true
    end
    

    ActiveModel :: 모델 코드 :

    module ActiveModel
      module Model
        def self.included(base)
          base.class_eval do
            extend  ActiveModel::Naming
            extend  ActiveModel::Translation
            include ActiveModel::Validations
            include ActiveModel::Conversion
          end
        end
    
        def initialize(params={})
          params.each do |attr, value|
            self.public_send("#{attr}=", value)
          end if params
        end
    
        def persisted?
          false
        end
      end
    end
    

    http://api.rubyonrails.org/classes/ActiveModel/Model.html

  5. ==============================

    5.당신의 "모델 /"디렉토리에 (파일 이름, 클래스 이름 낙타 사건에 대한 강조 파일 이름과 클래스 이름에 대한 단수) 당신이 사용하고있는 규칙을 다음 ".rb"로 끝나는 새 파일을 만듭니다. 여기서 핵심은 액티브에서하지 상속 모델이다 (그것은 당신에게 데이터베이스 기능을 제공하는 AR 때문에). 예컨대 : 자동차에 대한 새로운 모델에 대한 당신의 모델 / 디렉토리 및 모델 내부에 "car.rb"라는 파일을 만듭니다

    당신의 "모델 /"디렉토리에 (파일 이름, 클래스 이름 낙타 사건에 대한 강조 파일 이름과 클래스 이름에 대한 단수) 당신이 사용하고있는 규칙을 다음 ".rb"로 끝나는 새 파일을 만듭니다. 여기서 핵심은 액티브에서하지 상속 모델이다 (그것은 당신에게 데이터베이스 기능을 제공하는 AR 때문에). 예컨대 : 자동차에 대한 새로운 모델에 대한 당신의 모델 / 디렉토리 및 모델 내부에 "car.rb"라는 파일을 만듭니다

    class Car
        # here goes all your model's stuff
    end
    

    편집 : 당신이 당신의 클래스 속성을 원하는 경우 BTW, 당신은 여기에 당신이 루비에서 사용하는 모든 것을 사용할 수 있습니다, 그냥 "attr_accessor"을 사용하여 몇 줄을 추가합니다 :

    class Car
        attr_accessor :wheels # this will create for you the reader and writer for this attribute
        attr_accessor :doors # ya, this will do the same
    
        # here goes all your model's stuff
    end
    

    편집 # 2 : 데이터베이스에 액티브의 모든 기능을하지만 테이블을하지 않으 마이크의 설명을 읽은 후, 나는 자신의 길을 갈 당신을 말할 것입니다. 당신은 그냥 평범한 루비 클래스를 원하는 경우에, 어쩌면 당신은 더 나은이 솔루션을 찾을 수 있습니다)

  6. ==============================

    6.완성도를 위해서 :

    완성도를 위해서 :

    (V5에서) 지금 레일은 포함 할 수있는 편리한 모듈이 :

    ActiveModel :: 모델을 포함

    이것은 당신이 해시로 초기화하고, 다른 것들 사이에 검증을 사용할 수 있습니다.

    대한 문서가 여기에있다.

  7. ==============================

    7.라이언 베이츠에 의해 만들어진 비 액티브 레코드 모델에 대한 스크린 캐스트가있다. 에서 시작하는 좋은 장소.

    라이언 베이츠에 의해 만들어진 비 액티브 레코드 모델에 대한 스크린 캐스트가있다. 에서 시작하는 좋은 장소.

    다만 경우에 당신은 이미 그것을보고하지 않았다.

  8. ==============================

    8.나는 존 Topley의 제안에 따라,이 문제를 해결할 수있는 빠른 믹스 인을 구축했다.

    나는 존 Topley의 제안에 따라,이 문제를 해결할 수있는 빠른 믹스 인을 구축했다.

    http://github.com/willrjmarshall/Tableless

  9. ==============================

    9.무엇으로 추상 클래스를 표시 어떻습니까?

    무엇으로 추상 클래스를 표시 어떻습니까?

    class Car < ActiveRecord::Base
      self.abstract = true
    end
    

    이 Car 클래스가없는 테이블을 해당하는 것을 레일을 말할 것이다.

    [편집하다]

    당신이 좋아하는 일을해야하는 경우이 정말 도움이되지 않습니다 :

    my_car = Car.new
    
  10. ==============================

    10.Validatable 보석을 사용합니다. 당신이 말하는 것처럼,이 AR 기반의 솔루션,하지만 그들은 부서지기 쉬운 경향이있다.

    Validatable 보석을 사용합니다. 당신이 말하는 것처럼,이 AR 기반의 솔루션,하지만 그들은 부서지기 쉬운 경향이있다.

    http://validatable.rubyforge.org/

  11. ==============================

    11.누구는 지금까지 비 액티브 레코드 클래스에서 액티브 ::하는 검증 및 액티브 ::하는 검증 :: ClassMethods을 포함하고 설치 검증 할 때 어떻게되는지하기 위해 노력하고 있습니다?

    누구는 지금까지 비 액티브 레코드 클래스에서 액티브 ::하는 검증 및 액티브 ::하는 검증 :: ClassMethods을 포함하고 설치 검증 할 때 어떻게되는지하기 위해 노력하고 있습니다?

    나는 확실히 검증 프레임 워크와 액티브 자체 간의 종속성의 많음이있다하고 있습니다. 하지만 당신은 AR 검증 프레임 워크에서 자신의 검증 프레임 워크를 분기하여 이러한 종속성을 없애 버리는 성공할 수 있습니다.

    그냥 생각.

    업데이트 : oopps이 더 많거나 적은 질문에 링크 된 게시물에 제안 것 무엇. 방해 죄송합니다.

  12. ==============================

    12.티아고 핀토 좋아합니까 말했다 그냥 액티브 :: 자료에서 해당 모델의 상속이 없습니다. 단지 앱 / ​​모델 / 디렉토리에있는 파일에 붙어있는 일반 루비 클래스 수 있습니다. 당신의 모델 중 어떤 것도 테이블이없고 앱의 모든에서 데이터베이스 또는 액티브를 사용하지 않는 경우, 다음 줄을 가지고 당신의 environment.rb에 파일을 수정해야합니다 :

    티아고 핀토 좋아합니까 말했다 그냥 액티브 :: 자료에서 해당 모델의 상속이 없습니다. 단지 앱 / ​​모델 / 디렉토리에있는 파일에 붙어있는 일반 루비 클래스 수 있습니다. 당신의 모델 중 어떤 것도 테이블이없고 앱의 모든에서 데이터베이스 또는 액티브를 사용하지 않는 경우, 다음 줄을 가지고 당신의 environment.rb에 파일을 수정해야합니다 :

    config.frameworks -= [:active_record]
    

    이것은 레일 내에 있어야 :: Initializer.run가 할 | 설정 | 블록.

  13. ==============================

    13.당신은 PassiveRecord 플러그인을 체크 아웃해야한다. 그것은 당신에게 비 데이터베이스 모델에 대한 액티브와 같은 인터페이스를 제공합니다. 그것은 간단하고, 액티브 싸움보다 번거 로움입니다.

    당신은 PassiveRecord 플러그인을 체크 아웃해야한다. 그것은 당신에게 비 데이터베이스 모델에 대한 액티브와 같은 인터페이스를 제공합니다. 그것은 간단하고, 액티브 싸움보다 번거 로움입니다.

    우리는 OP의 원하는 동작을 얻을 수있는 Validatable 보석과 함께 PassiveRecord을 사용하고 있습니다.

  14. from https://stackoverflow.com/questions/315850/rails-model-without-database by cc-by-sa and MIT license