2013-03-30 1 views
1

레일 3.2.12 앱에서 액세스 규칙에 따라 new/edit 개의보기 (simple_form 사용)의 필드를 선택적으로 표시하고 싶습니다. 예를 들어 영업의 경우 고객의 namephone# 만 표시 할 수 있습니다. 우리는 액세스 규칙이 무엇인지 알지 못하기 때문에 런타임에보기를 동적으로 구성해야합니다. 이를 수행하는 한 가지 방법은보기에서 if을 사용하는 것이고보기가 더러워집니다. 우리는 custom 양식 빌드가 도움이 될 것으로 생각했습니다. 사용자 정의 양식 작성 도구에 대한 온라인 게시물 몇 개를 읽은 후에도 여전히 단서가 많지 않았습니다. 누군가가 custom 양식 작성 도구로이를 구현하는 방법에 대한 세부 정보를 제공 할 수 있습니까? 도와 주셔서 감사합니다!레일즈 3.2.12에서 사용자 정의 폼 빌더를 사용하여 새/편집보기에 필드를 선택적으로 표시하는 방법은 무엇입니까?

업데이트 : 액세스 규칙이 어떤 것인지 알 수 없으므로 dynamically은 실행시에 view을 생성해야합니다.

답변

2

일반적으로 사용자 지정 양식 작성기는 필드 액세스를 제어하는 ​​것보다 양식 HTML의 구조를 변경하는 데 사용됩니다.

제안 부부의 의견을 "청소"하기 :

  1. 당신이 하나의 단위로 양식 필드/라벨을 처리하게됩니다 SimpleForm를 사용하여 쉽게 = form_builder.input :credit_card_number if current_user.admin? 같은 단지 뭔가를 사용하여 필드를 제외 할 수있다.
  2. 더 많은 응용 프로그램에 대한 솔루션 CanCan을 사용하면 권한 부여 및 역할을 관리 할 수 ​​있습니다.

편집 : 모든 열이 동일하게 취급하는 경우 당신을 위해 좋은 방법이 될 수 다음과 당신이 순서를 변경할 필요가 없습니다처럼 귀하의 의견을 바탕으로

, 그것은 소리 (HAML을 사용하지만 필요한 경우 ERB로 변경할 수 있습니다).

= simple_form_for @model do |f| 
    = f.error_notification 
    - @model.columns_available_for(current_user).each do |column| 
     = f.input column 
+0

우리가 simple_form을 사용하고 있는지 얘기를 깜빡 했네요. 자체 인증 모듈을 구축했습니다. 우리가 이해 하듯이, CanCan은 컬럼 레벨 인증을하지 않습니다. – user938363

+0

알겠습니다. CanCan이 사용자 지정 작업 (https://github.com/ryanb/cancan/wiki/Custom-Actions)을 사용하여 일종의 칼럼 레벨 인증을 할 수있게 만들지 만, 귀하의 경우 실제로 개선되지는 않는 것처럼 들립니다. 이미 SimpleForm을 사용하고 있으므로 모델에'accessible_columns_for_role' 메소드를 추가 (심볼 배열 반환) 한 다음 각 뷰에 대해'simple_form_builder.input'을 호출하여 뷰를 반복 할 수 있습니다. –

+0

실제로 attr_accessible은 이미 ": as => : role"옵션을 지원하므로보기 루프에서 해당 옵션을 읽을 수있는 방법을 찾을 수 있습니다. –

1

레일 헬퍼를 사용하면 할 수 있습니다.

예 : 귀하의 의견에

module SalesHelper 
def show_fields 
    if current_user.admin? 
    render 'some_partial' #having name and phone field 
    else 
    render 'other_partial' 
    end 
end 

는 각각의 파셜를 추가하고 신규 또는 편집에서 불과
<퍼센트를 호출 = show_fields %>

+0

흥미 롭습니다! 도우미가보기를 더 깨끗하게 만듭니다. – user938363

+0

액세스 규칙이 어떻게 될지 모르기 때문에 런타임에 동적으로보기를 구성 할 수있는 방법이 있습니까? – user938363