Переключатель Ruby on Rails для выбора базы данных

0

В настоящее время я работаю над формой, в которой пользователь может выбирать между 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
  • 0
    on в смысле true ?
  • 0
    Да, видимо.
Теги:
database
ruby-datamapper

3 ответа

2
Лучший ответ

Вам нужно указать значения для переключателей, чтобы определить, какая была отправлена - группа переключателей вернет значение выбранной кнопки.

Ввиду:

<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
1

Почему вы не используете помощников формы 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
1

Если я правильно понял, это то, что вы хотите

<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

Примечание. Не проверял, попробуйте и дайте мне знать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню