2012-07-30 1 views
1

ActiveAdmin을 사용하고 있습니다. 복수 선택이 아닌 :select, :collection 등으로 작업하려고합니다.ActiveAdmin Form not respecting : multiple => false

내 코드는 다음과 같습니다이 /admin/businesses.rb

form do |f| 
    f.input :users, :as => :select, :input_html => { :size => 1}, :multiple => false, collection: User.where(role:1), include_blank: false 
end 

. 관계는 사용자와 기업 간에는 habtm이 존재한다는 것입니다. github issue과 같이 내 옵션을 다시 정렬 해 보았습니다. 나는 또한 similar stackoverflow question을 보았다. 선택한 두 가지가 있다는 것을

<select id="business_user_ids" multiple="multiple" name="business[user_ids][]" size="1">  
<option value="4">Pilgrim</option> 
<option value="5" selected="selected">Mary</option> 
<option value="6" selected="selected">Bob</option> 
<option value="7">Billy</option> 
<option value="8">Ash</option></select> 

주, 다중의 코드는 multiple로 설정 : 나는 :multiple => false와 함께 할 때

그러나,이 생성 된 코드를 얻을. 어떤 사람이이 이유인지 아십니까?

또한 선택할 수있는 다른 필드를 표시하는 방법을 알아 내려고합니다.

예를 들어 f.inputs : users가 있습니다. 사용자에게 표시되는 이름을 바꿀 수있는 방법이 있습니까? 지금은 users.name을 보여 주지만 users.email을 원합니다.

답변

2

난 그냥이 문제에 부딪 혔어. 약간의 코드 트레이싱 후에 나는 그것이 기본 Formtastic lib의 듀오임을 발견했다.

Formtastic은 전달할 옵션에 대해 기존 반영 (has_many & has_and_belongs_to_many)보다 우선합니다. 여러 가지로 결정합니다.

대다수 관계에서 단일 선택을 강요하면 약간의 혼란이 생길 ​​수 있다고 생각합니다. 데이터와 마찬가지로 이미 두 가지가 선택되었으며, 엄격한 단일 선택에 표시되어야하는 것은 무엇입니까? 하지만 나중에 Formtastic에이 문제를 제기 할 것입니다. 당신은 여전히 ​​그 기능이 필요한 경우

, 당신은 원숭이 설정에서 다음 코드를 삽입하여 패치를 수/초기화/formtastic.rb

module Formtastic 
    module Inputs 
    class SelectInput 
     def multiple_with_options_fix? 
     return false if options[:multiple] === false 
     multiple_without_options_fix? 
     end 

     alias_method_chain :multiple?, :options_fix 
    end 
    end 
end 

그리고 두 번째 질문에 대한

, 당신은 단지 다음을 추가해야합니다 코드를 모델에 추가하십시오.

class User < ActiveRecord::Base 
    ..... 

    def to_label 
    self.email 
    end 
end 
+0

감사합니다, 원숭이 패치와 함께 매력처럼 일했습니다. 나는 to_label도 조사 할 것이다. to_label을 즉시 변경할 수 있습니까? 예를 들어, .name을 표시하고 싶지만 to_label로 .email을 보여주고 싶다면, 가능합니까? – LyricalPanda

+0

http://rubydoc.info/gems/formtastic/2.0.0/Formtastic/Helpers/InputHelper에 따라 Formtastic의 이전 버전에는 member_label 또는 : label_method 입력 옵션을 전달할 수 있습니다. – StackNG

0

정확하게 문제가 있는지 잘 모르겠습니다. 입력 요소의 레이블 만 변경 하시겠습니까? 아니면 표시되는 속성 유형을 변경 하시겠습니까? 사용자 : 라벨 => "이메일"내가 런타임에 레이블을 변경하는 어떤 청소 방법이라고 생각하지 않습니다

의 바로 레이블 값은 당신이

f.inputs를 사용할 수 있다면. params 해시의 'action'값을 확인하여이를 달성 할 수 있습니다. 그래서 새로운 액션에서이보기를 표시 예를 들어, 당신은

<% if params[:action]="new"%> 
f.inputs :users, :label=>"Email" 
<%else%> 
f.inputs :users, :label=>"Name" 
<%end%> 

는 희망이 도움이 말할 수

1

formtastic 무시는 동안 : 여러 => 옵션 해시 사실, 그것은 input_html 옵션에서 그것을 존중 않습니다 .이것을 줘라 :

f.input :users, :as => :select, :input_html => { :size => 1, :multiple => false }, :multiple => false, collection: User.where(role:1), include_blank: false