[RUBY-ON-RAILS] 데이터베이스없이 모델을 레일
RUBY-ON-RAILS데이터베이스없이 모델을 레일
나는 레일 (2.1 및 2.2) 액티브 검증과 모델하지만, 데이터베이스 테이블없이를 만들려고합니다. 가장 널리 사용되는 방법은 무엇입니까? 나는이 기능을 제공 주장하는 몇 가지 플러그인을 찾았지만, 그들 중 많은 사람들이 널리 사용되거나 유지 될 나타나지 않습니다. 무엇 사회는 내가 추천입니까? 지금은이 블로그 게시물을 기반으로 내 자신의 해결책을 오는쪽으로 기울고 있어요.
해결법
-
==============================
1.나는 당신이 연결되어있는 블로그 게시물이 이동하는 가장 좋은 방법이라고 생각합니다. 난 단지 코드를 오염하지 않는 모듈에 가지 메소드로 이동 건의 할 것입니다.
나는 당신이 연결되어있는 블로그 게시물이 이동하는 가장 좋은 방법이라고 생각합니다. 난 단지 코드를 오염하지 않는 모듈에 가지 메소드로 이동 건의 할 것입니다.
-
==============================
2.레일 3이 할 수있는 더 좋은 방법이있다 : http://railscasts.com/episodes/219-active-model
레일 3이 할 수있는 더 좋은 방법이있다 : http://railscasts.com/episodes/219-active-model
-
==============================
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.이제 더 쉬운 방법이 있습니다 :
이제 더 쉬운 방법이 있습니다 :
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.당신의 "모델 /"디렉토리에 (파일 이름, 클래스 이름 낙타 사건에 대한 강조 파일 이름과 클래스 이름에 대한 단수) 당신이 사용하고있는 규칙을 다음 ".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.완성도를 위해서 :
완성도를 위해서 :
(V5에서) 지금 레일은 포함 할 수있는 편리한 모듈이 :
ActiveModel :: 모델을 포함
이것은 당신이 해시로 초기화하고, 다른 것들 사이에 검증을 사용할 수 있습니다.
대한 문서가 여기에있다.
-
==============================
7.라이언 베이츠에 의해 만들어진 비 액티브 레코드 모델에 대한 스크린 캐스트가있다. 에서 시작하는 좋은 장소.
라이언 베이츠에 의해 만들어진 비 액티브 레코드 모델에 대한 스크린 캐스트가있다. 에서 시작하는 좋은 장소.
다만 경우에 당신은 이미 그것을보고하지 않았다.
-
==============================
8.나는 존 Topley의 제안에 따라,이 문제를 해결할 수있는 빠른 믹스 인을 구축했다.
나는 존 Topley의 제안에 따라,이 문제를 해결할 수있는 빠른 믹스 인을 구축했다.
http://github.com/willrjmarshall/Tableless
-
==============================
9.무엇으로 추상 클래스를 표시 어떻습니까?
무엇으로 추상 클래스를 표시 어떻습니까?
class Car < ActiveRecord::Base self.abstract = true end
이 Car 클래스가없는 테이블을 해당하는 것을 레일을 말할 것이다.
[편집하다]
당신이 좋아하는 일을해야하는 경우이 정말 도움이되지 않습니다 :
my_car = Car.new
-
==============================
10.Validatable 보석을 사용합니다. 당신이 말하는 것처럼,이 AR 기반의 솔루션,하지만 그들은 부서지기 쉬운 경향이있다.
Validatable 보석을 사용합니다. 당신이 말하는 것처럼,이 AR 기반의 솔루션,하지만 그들은 부서지기 쉬운 경향이있다.
http://validatable.rubyforge.org/
-
==============================
11.누구는 지금까지 비 액티브 레코드 클래스에서 액티브 ::하는 검증 및 액티브 ::하는 검증 :: ClassMethods을 포함하고 설치 검증 할 때 어떻게되는지하기 위해 노력하고 있습니다?
누구는 지금까지 비 액티브 레코드 클래스에서 액티브 ::하는 검증 및 액티브 ::하는 검증 :: ClassMethods을 포함하고 설치 검증 할 때 어떻게되는지하기 위해 노력하고 있습니다?
나는 확실히 검증 프레임 워크와 액티브 자체 간의 종속성의 많음이있다하고 있습니다. 하지만 당신은 AR 검증 프레임 워크에서 자신의 검증 프레임 워크를 분기하여 이러한 종속성을 없애 버리는 성공할 수 있습니다.
그냥 생각.
업데이트 : oopps이 더 많거나 적은 질문에 링크 된 게시물에 제안 것 무엇. 방해 죄송합니다.
-
==============================
12.티아고 핀토 좋아합니까 말했다 그냥 액티브 :: 자료에서 해당 모델의 상속이 없습니다. 단지 앱 / 모델 / 디렉토리에있는 파일에 붙어있는 일반 루비 클래스 수 있습니다. 당신의 모델 중 어떤 것도 테이블이없고 앱의 모든에서 데이터베이스 또는 액티브를 사용하지 않는 경우, 다음 줄을 가지고 당신의 environment.rb에 파일을 수정해야합니다 :
티아고 핀토 좋아합니까 말했다 그냥 액티브 :: 자료에서 해당 모델의 상속이 없습니다. 단지 앱 / 모델 / 디렉토리에있는 파일에 붙어있는 일반 루비 클래스 수 있습니다. 당신의 모델 중 어떤 것도 테이블이없고 앱의 모든에서 데이터베이스 또는 액티브를 사용하지 않는 경우, 다음 줄을 가지고 당신의 environment.rb에 파일을 수정해야합니다 :
config.frameworks -= [:active_record]
이것은 레일 내에 있어야 :: Initializer.run가 할 | 설정 | 블록.
-
==============================
13.당신은 PassiveRecord 플러그인을 체크 아웃해야한다. 그것은 당신에게 비 데이터베이스 모델에 대한 액티브와 같은 인터페이스를 제공합니다. 그것은 간단하고, 액티브 싸움보다 번거 로움입니다.
당신은 PassiveRecord 플러그인을 체크 아웃해야한다. 그것은 당신에게 비 데이터베이스 모델에 대한 액티브와 같은 인터페이스를 제공합니다. 그것은 간단하고, 액티브 싸움보다 번거 로움입니다.
우리는 OP의 원하는 동작을 얻을 수있는 Validatable 보석과 함께 PassiveRecord을 사용하고 있습니다.
from https://stackoverflow.com/questions/315850/rails-model-without-database by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] PG undefinedtable 오류와 관련하여 사용자가 존재하지 않습니다 (0) | 2020.02.06 |
---|---|
[RUBY-ON-RAILS] ExecJS :: 사용자 # 지수 RuntimeError에 (의 RoR) (0) | 2020.02.06 |
[RUBY-ON-RAILS] Heroku가 거부 밀어, 더 세다 지원하는 응용 프로그램은 감지되지 (0) | 2020.02.06 |
[RUBY-ON-RAILS] 레일 : 파셜에 지역 주민을 전달하는 구문에 대해 혼란 (0) | 2020.02.06 |
[RUBY-ON-RAILS] 레일의 단수 또는 복수의 컨트롤러 및 도우미 이름 (0) | 2020.02.06 |