Работя върху приложение Rails 4, използвайки simple_form за въвеждане. Има няколко моделни полета, които могат да приемат добре познати отговори или отговор в свободна форма. Например за поле fruit:string
Бих искал да покажа "Apple"
, "Banana"
, "Other"
, Ако потребителят избере "Other"
, те могат да въведат всеки текст в свободна форма. В момента всичко, което мога да направя, е да използвам <%= f.input :fruit %>
и се появява празно текстово поле. Възможно ли е вместо това да се показват радио бутони? аз мога да направя
<%= f.collection_radio_buttons :fruit, [["Apple", "Apple"], ["Banana", "Banana"]], :first, :last %>
но това не предоставя опцията „Други“. Целта е да запишете "Apple", "Banana" или определената (въведена) стойност, ако е избрано "Other".
Отговори:
1 за отговор № 1Simple Form ви позволява да ни as: :radio_buttons
върху колекция, така е
<%= f.input :fruit, collection: ["apple", "banana", "other"], as: :radio_buttons %>
Вижте раздел за събиране на SimpleForm README за повече информация относно данните за събиране.
0 за отговор № 2
Едно решение би било да има f.collection_radio_buttons, последвани от f.input, и двете със същото име. След това избирателно активирайте f.input въз основа на избрания радио бутон с jquery или javascript. За да работи това, вероятно бихте искали да добавите и опция ["Other"] ["Other"].
РЕДАКТИРАНЕ Може би нещо по тези линии:
f.collection_radio_buttons :fruit, [["Apple","Apple"],["Orange","Orange"],["Other","Other"]], :first, :last
f.text_field :fruit
$("input:radio[name="foo[fruit]"]").change(function(){
if($(this).val() == "Other"){
$("input:text[name="foo[fruit]"]").show().prop( "disabled", false);
}else{
$("input:text[name="foo[fruit]"]").hide().prop( "disabled", true );
}});
Тъй като имат същото име, Rails ще използва последната стойност (текстовото поле в този случай, ако е активирано), в противен случай ще използва избрания радио бутон.