1

Вопрос по simple-form, rendering, ruby-on-rails-3, ruby-on-rails – undefined

Используя simple_form, я отображаю некоторые переключатели, чтобы выбрать пол на странице регистрации.

код:

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

Это дает вывод как:

enter image description here

Есть ли способ сделать так, чтобы первая кнопка переключалась позади мужчины, а вторая кнопка - позади женщины?

  • Привет @Rubytastic как ты прошел? Вы видели мое последнее редактирование? Я поставил его сверху, и это правильный способ сделать то, что вы просили, без хаков. Я наконец нашел это как комментарий в коде simple_form.

    от
  • Спасибо за комментарий, он на самом деле просто меняет кнопки, у которых нет решения, проблема в том, что на изображении «Пол» (метка) находится прямо перед первой радиокнопкой, где это должно было быть "Мужской" затем (*) женщина

    от Rubytastic
  • Все еще не полностью работая, я продолжил это, так как этот пост становится беспорядком, предоставленным для поста по этому вопросу. Кажется странной проблемой с вашим кодом, в результате чего печатаются цифры. Посмотри пожалуйстаstackoverflow.com/questions/11272764/…

    от Rubytastic
  • Должен дать этому попробовать thx для размещения;) Если это работает, я даю вопрос thx

    от Rubytastic
  • Извините, я слишком быстро ответил.

    от
  • Вы проверили, что HTML, который он производит, не так? Потому что это выглядит как вопрос стиля для меня.

    от Gerry
  • Что такое содержаниеgender Переменный / метод? Это массив?

    от Wolfram Arnold
  • 1

    Вы пытались просто создать или отсортировать коллекцию в нужном вам по

    рядке?

    Примерно так:

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

    Очевидно, что это не лучшее решение. Вы должны создать список в правильном порядке.

  • 4

    Вот лучшее решение, чем мой оригинал ниже.

    Из кода:

    #   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 { b.text + b.radio_button }
      end
    %>
    

    Вы можете даже добавить других помощников, таких какimage_tag там тоже:

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

    Это решение не является обычным пользовательским компонентом. Этот пользовательский компонент наследуется от CollectRadioButtonsInput вместо обычного класса CollectionInput. Я изменил 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
    

    Это можно использовать так

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

  • 1

    Не уверен в точной вещи

    но есть то, что называется заказ, который может быть назначен, какой тег должен отображаться первым, например. [: label,: input], а также вставка могут помочь здесь.