我目前正在处理一个表单,用户可以在这个表单中选择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
答案 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