2011-04-21 3 views
1

사용자가 좋아하는 출판물을 저장하고 문제가 발생하여 도움이 필요한 레일즈 애플리케이션에 루비를 만듭니다.레일스 3 데이터베이스 테이블에 저장된 속성으로 모델을 동적으로 생성합니다.

사용자는 책, 영화, 신문, 기사 등과 같이 원하는만큼 다양한 유형의 출판물을 추가 할 수 있습니다. 각 출판물 유형에는 서로 다른 속성이 있습니다. 예를 들어 책에는 저자와 발행인이있을 수 있습니다. 영화에는 감독과 제작자가있을 수 있습니다. 단일 발행물에는 많은 속성이 있습니다.

내 응용 프로그램은 현재 다음과 같습니다. 출판물 출판물 유형을 저장하는 자료가 있습니다. 특정 출판물에 대한 모든 속성을 저장하는 속성 이라는 자원이 있습니다. 마지막으로 즐겨 찾기이라는 세 번째 리소스가 있습니다.

사용자가 새 즐겨 ​​찾기를 만들고 게시를 선택
class Publication < ActiveRecord::Base 
has_many :attribs 

# columns in this model => name, hidden 

# example (:name => "movie", :hidden => false) 
end 

class Attrib < ActiveRecord::Base 
belongs_to :publication 

# columns in this model => publication_id, name, datatype 

# example (:publication_id => 1, :name => "Movie Title", :datatype => "string") 
 # example (:publication_id => 1, :name => "Director", :datatype => "string") 
end 

class Favourite < ActiveRecord::Base 

# columns in this model => data, reason 

# example (:data => "[serialized form data]", :reason => "some reason why its a fav") 

end 

, 나는 사용자가 특정 게시에 대해 선택한 속성을 생성 할 양식을하고 싶습니다.

데이터베이스 테이블에 저장된 특성을 사용하여 모델/양식을 동적으로 만들 수있는 방법이 있습니까?

Formtastic은 동적 폼 생성기이므로 폼을 만드는 데 사용할 수 있습니까?

내게 이것은 지나치게 복잡해 보이지만 내 응용 프로그램에 엄청나게 많은 양의 테이블이 없으면 다른 방법으로 설명 할 수 없습니다.

답변

1

Formtastic 및 Simple Form 보석에는 양식을 생성하기위한 모델이 필요합니다. 이 게시물 here을 확인하십시오. 테이블없는 모델을 만듭니다. 그런 다음 테이블없는 모델을 사용하여 임시 모델을 만듭니다. 그런 다음 해당 모델의 열 값을 보유한 테이블에서 임시 모델 열을 가져옵니다 (해당 링크에서 Foo에 대해 수행되는 것처럼). 임시 클래스의 인스턴스를 사용하여 Formtastic을 사용하여 양식을 생성 할 수 있습니다.

0

직접 구현할 수 있다고 생각합니다.

@publication.attribs.each do |attrib| 
    case attrib.datatype 
    when "string" 
    f.text_field attrib.name 
    when "text" 
    f.text_area attrib.name 
    when "password" 
    f.password_field attrib.name 
    ... 
end 
관련 문제