2013-07-30 23 views
1

"사용자 정의 필드"를 판매 응용 프로그램 (Ruby 2, Rails 4, Postgres)에 추가하려고합니다.사용자 정의 필드 구현

relevant database schema

이 구현에 대해 갈 수있는 가장 좋은 방법은 무엇입니까 : 여기

은 관련 스키마인가? values은 다형성이며 fieldsaccounts으로 일대 다입니다.

필드를 반복하고 연결된 값을 가져 오는 방법이 있습니까?

답변

3

나는 당신의 문제점이 무엇인지에 대해 착각 할 수는 있지만 레일스는 입력에 대한 초기 값/기본값을 얻으려고하기 때문에 whatever-custom-field-label-is 메서드를 호출하고 있다고 생각합니다.

+0

아마 맞을거야. 사용자 정의 필드가'@ sale' (또는 Sale 모델)의 일부가 아니기 때문에 이것을 해결하는 방법에 대한 제안은 무엇입니까? – Dre

+0

@Dre 'text_field' 메소드에 디폴트 값을 전달하고 호출을 피할 수는 있지만, 프리젠터/폼 데코레이터를 사용하기 위해 뷰를 재 구조화하는 것이 더 나을 것입니다 ([Reform] (https://github.com/apotonick/reform)). – coreyward

1

text_field과 같은 도우미를 사용하려면 명명 된 속성에 대한 getter 메소드가 있어야합니다. Rails는이 필드를 사용하여 필드를 채 웁니다.

여러 모델에 걸쳐있는 양식에 대한 기본 접근 방식은 중첩 된 특성입니다. 당신이 당신의 각 값에 대한 라벨과 텍스트 필드를 렌더링해야 다음

= @sale.fields_for :values do |value_form| 
    = value_form.label :data, value_form.object.field.label 
    = value_form.text_field :data 

당신의 판매 모델에 accepts_nested_attributes_for :values을 추가하는 경우

은 (블록은에 한 번 각 값에 대해 산출됩니다).

또는 레일 도우미를 모두 피할 수 있습니다.

대신 당신이 당신의 형태로 넣어에서

= text_field_tag "sale[values_hash][#{v.field.label}]", v.data 

는 그 다음 모델을 변경하지 렌더링해야합니다. 양식이 params[:sale][:values_hash]을 제출하면 입력 된 값에 대한 필드 레이블의 해시가됩니다. 모델에 values_hash= 메소드가 필요하거나 저장 내용이 폭발합니다. 이 경로를 계속 따라 가면 레일의 중첩 된 속성으로 끝날 것입니다.

레일에 복잡한 형태의 다른 접근법이 있습니다. 하나는 퍼시스턴스 오브젝트와 폼 표현 사이의 데이터를 마샬링하는 일에만 책임이있는 폼 객체를 생성하는 것입니다. 폼 X를 별도의 테이블에 저장하고 그 종류의 것을 알 필요가 없도록 양식을 분리하십시오.

+0

두 번째 방법은 나를 위해 일했습니다. 감사합니다. 그러나 나는 초기 질문을 제대로 표현하지 못했을 것이다. 필드 자체를 반복하고 관련 데이터를 채우는 가장 좋은 방법은 무엇입니까? 예를 들어, 새 객체에 연관된 'values'가없고 아무 것도 나타나지 않는 문제와 같은 문제가 있습니다. – Dre

+0

어느 방법을 사용하든 입력 값을 렌더링하려면 빈 값을 만들어야합니다. –

+0

일반적으로 나쁜 방법으로 간주됩니까? 'null' 값이 전혀 삽입되지 않는 곳에서 그것을 할 수있는 방법이 있습니까? 이로 인해 주요 성능 문제가 발생합니까? – Dre