В настоящее время я работаю над формой, в которой пользователь может выбирать между 1-5 альтернативами переключателей, а затем загружать то, что они выбирают для базы данных.
В настоящее время я использую другое имя для каждого переключателя, а затем проверяю, какой параметр размещен равен "включен". Но поскольку отношения и параметры описываются с именем, я не могу получить связь между кнопками для работы (если активна одна кнопка, другие /s не активны)
Итак, как я могу определить, какой переключатель активен, если я не могу использовать разные имена и проверять параметры?
<div class="form-group">
<div class="col-lg-10">
<p style="font-size: 16px">
<input type="radio" id="option1" name="option1" />
<label for="option1"><%= @poll.option1 %></label></p>
</div>
</div>
<div class="form-group">
<div class="col-lg-10">
<p style="font-size: 16px">
<input type="radio" id="option2" name="option2" />
<label for="option2"><%= @poll.option2 %></label></p>
</div>
</div>
И вот как я проверяю, какой из них активен, но как я могу проверить, активен ли переключатель, если они не используют разные имена/параметры? Я использую Sinatra и Datamapper, SQLite для управления базами данных.
if params["option1"] == "on"
Vote.create(vote: "option1", ip: ip_adress, poll_id: poll.id)
redirect urlstring
end
if params["option2"] == "on"
Vote.create(vote: "option2", ip: ip_adress, poll_id: poll.id)
redirect urlstring
end
Вам нужно указать значения для переключателей, чтобы определить, какая была отправлена - группа переключателей вернет значение выбранной кнопки.
Ввиду:
<input type="radio" name="options" value="1">Option 1</input>
<input type="radio" name="options" value="2">Option 2</input>
<input type="radio" name="options" value="3">Option 3</input>
<input type="radio" name="options" value="4">Option 4</input>
В контроллере:
case params["options"].to_i
when 1
# Vote for 1
when 2
# Vote for 2
...
end
Почему вы не используете помощников формы Rails? Если форма поддерживается объектом, используйте хэндлеры формы, встроенные в рельсы.
Если вы вложенные объекты, вы можете использовать accepts_nested_attributes_for
.
Ваша форма может быть примерно такой:
class Poll
OPTIONS = %w[option_1 option_2 option_3]
end
form_for @poll do |f|
f.fields_for :vote do |vote|
Poll::OPTIONS.each do |option|
vote.radio_button :vote, option
В вашем контроллере вы выполните следующее:
def new
@poll = Poll.new
@vote = @poll.votes.build
end
Метод create будет таким же простым, как:
def create
@poll = Poll.new(poll_params) #if you are using strong_parameters, which you should
if @poll.save
else
end
end
Если я правильно понял, это то, что вы хотите
<div class="form-group">
<div class="col-lg-10">
<p style="font-size: 16px">
<label for="poll_option">Poll Option:</label>
<% ['option1','option2','option3','option4','option5'].each do |poll_option| %>
<%= radio_button_tag 'poll_option', poll_option,@poll_option == poll_option %>
<%= poll_option %>
<% end %>
</div>
</div>
И тогда вы можете использовать параметры, подобные этому
if params["poll_option"] == "option1"
Vote.create(vote: "option1", ip: ip_adress, poll_id: poll.id)
redirect urlstring
end
if params["poll_option"] == "option2"
Vote.create(vote: "option2", ip: ip_adress, poll_id: poll.id)
redirect urlstring
end
Примечание. Не проверял, попробуйте и дайте мне знать.
on
в смыслеtrue
?