2012-04-04 4 views
1

simple_form을 사용하여 일부 라디오 버튼을 렌더링 페이지에서 성별을 선택하도록 렌더링합니다.simple_form이 라디오 버튼을 잘못 렌더링합니다.

코드 :

 = f.input :gender, 
       :collection => gender, 
       :as => :radio_buttons, 
       :item_wrapper_class => 'inline' 

이 같은 출력을 제공합니다

enter image description here

가 첫 번째 라디오 버튼은 남성과 여성의 뒤에 두번째 라디오 버튼 뒤에 만들 수있는 방법이 있나요?

+0

처럼 사용할 수 있습니다? 왜냐하면 그것은 나에게 스타일링 문제처럼 보였습니다. – Gerry

+0

'gender' 변수/메소드의 내용은 무엇입니까? 배열입니까? –

답변

4

다음은 내 원본보다 나은 해결책입니다.

<%= f.collection_radio_buttons(
    :gender, [['Male', 'Male'], ['Male', 'Male']], :first, :last 
) do |b| 
    b.label { b.text + b.radio_button } 
    end 
%> 

당신도이도에 image_tag 같은 다른 헬퍼를 추가 할 수 있습니다 :

# form_for @user do |f| 
#  f.collection_radio_buttons(
#  :options, [[true, 'Yes'] ,[false, 'No']], :first, :last 
# ) do |b| 
#  b.label { b.radio_button + b.text } 
#  end 
# end 

내가이 당신을 위해 무엇을 찾고있는 생각 : 코드에서

<%= f.collection_radio_buttons(
    :gender, [['Male', 'Male'], ['Male', 'Male']], :first, :last 
) do |b| 
    b.label { image_tag("#{b.text}.png") + b.radio_button } 
    end 
%> 

이 솔루션은 일반적인 사용자 지정 구성 요소가 아닙니다. 이 사용자 지정 구성 요소는 일반 CollectionInput 클래스 대신 CollectRadioButtonsInput에서 상속받습니다. 나는 2 가지 관련 방법을 수정했다. app/inputs/radio_buttons_left_label_input.rb

class RadioButtonsLeftLabelInput < SimpleForm::Inputs::CollectionRadioButtonsInput 
    def input 
    label_method, value_method = detect_collection_methods 

    @builder.send("collection_radio_buttons", 
     attribute_name, collection, value_method, label_method, 
     input_options, input_html_options, &collection_block_for_nested_boolean_style 
    ) 
    end 

    protected 

    def build_nested_boolean_style_item_tag(collection_builder) 
    collection_builder.text.html_safe + collection_builder.radio_button.html_safe 
    end 
end 

내부

는 그것은 당신이 그것을 생산하는 HTML이 잘못된 것을 확인 했이

<%= form.input :gender, 
    :as => :radio_buttons_left_label, 
    :collection => %w[Female Male] 
%> 
+0

게시를 위해이 시험을 제공해야합니다;) 작동하는 경우 질문이 허용됩니다. – Rubytastic

+0

안녕하세요 @Rubytastic 어떻게하셨습니까? 내가 가장 최근에 편집 한 것을 보았 니? 나는 그것을 맨 위에 놓았고, 당신이 요구 한 바를 행하는 정확한 방법이며, 해킹이 필요하지 않습니다. 나는 그것을 simple_form 코드의 주석으로 마침내 발견했습니다. – 23inhouse

+0

아직 완전히 작동하지 않음이 포스트가이 포스트에 부여 된 엉망진창이기 때문에 이에 대한 후속 조치를했습니다. 숫자가 인쇄되도록하는 코드에 이상한 문제가있는 것 같습니다. http://stackoverflow.com/questions/11272764/simple-form-render-image-x-label-with-twitter-bootstrap을 참조하십시오. – Rubytastic

1

정확한 내용은 확실하지 않지만 먼저 표시 할 태그를 지정할 수있는 order라는 항목이 있습니다. [: label, : input] 그리고 인라인이 도움이 될 수도 있습니다.

1

원하는 순서로 컬렉션을 만들거나 간단하게 만들려고 했습니까? 이 같은

Somethink는 :

= f.input :gender, 
    :collection => gender.reverse, 
    :as => :radio_buttons, 
    :item_wrapper_class => 'inline' 

분명히, 이것은 더 나은 해결책이 아니다. 올바른 순서로 목록을 만들어야합니다.

+0

Thx 코멘트가 실제로 단지 단추가없는 솔루션을 교환하는 문제는 "성별"(레이블)이 첫 번째 라디오 단추 바로 앞에 "남성"과 (*) 문자가 있어야하는 것과 같습니다. 여성 – Rubytastic

+0

죄송합니다, 너무 빨리 대답했습니다. – Dougui

관련 문제