Ruby on Rails单选按钮选择到数据库

时间:2014-05-08 11:06:18

标签: html ruby-on-rails ruby database ruby-datamapper

我目前正在处理一个表单,用户可以在这个表单中选择1-5个单选按钮,然后将他们选择的内容上传到数据库。

我目前在每个单选按钮上使用不同的名称,然后检查发布的哪个参数等于" on"。 但由于关系和params用名称描述我不能让按钮之间的关系工作(如果一个按钮处于活动状态,其他/ 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

3 个答案:

答案 0 :(得分: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 :(得分: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

注意:虽然没有经过测试,请尝试并告诉我。

答案 2 :(得分:1)

为什么不使用Rails表单助手?如果表单由对象支持,请使用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