在大学作业中,我们正在用ruby on rails创建一个网站,允许用户通过选票页面为选举投票。这个选票看起来和真实选举中使用的选票一模一样。
下面是一张选票表格的图片。
视图中的党派和候选人是通过数据库中的候选人表(有candate.rb模型)生成的。目前我正在研究线下投票。
在数据库中,还有两个表,分别是投票和选票。每个Ballot存储BallotID,在Ballot.rb中,有一个 "Ballot.rb"。has_many :vote
. 每张投票都会存储CandidateID,BallotID和偏好,这是一个整数。
在我的视图中,对于行以下的投票,我有haml.BallotID和preference。
- @parties.each_with_index do |party, index|
.column.is-1
%h6.title.is-6.mb-05= party
-# Below the line Candidates
- @candidates.at(index).each do |candidate|
.level.mt-2
.select
= select_tag :preference, options_for_select(@array_below)
.candidate
=candidate.Surname
%br/
%span
=candidate.GivenNm
%br/
%span
=candidate.PartyNm
所以有几件事要解释一下上面的代码: @parties存储了所有不同的政党名称。@candidates是一个数组,其中每个索引存储了一个给定党派的所有候选人。@array_below是一个数组,包含1到候选人的数量。
所有的东西都是正确的,但是我的问题发生在嵌套在循环中的选择标签上。
如果我选择上图所示的偏好,然后点击提交,我希望能够为每个选定的偏好创建一个投票。然而,通过我实现代码的方式,当提交时有一个POST请求时,preference包含最后一个select_tag所选择的选项。在这种情况下,"preference"=> "12"。
我在路由中指定的POST请求是 post 'vote/submit_vote'
. 我在vote_controller.rb中定义了submit_vote,并希望能够循环浏览所有选定的偏好和他们各自的candroidID。调用Vote.create()来处理每个选项。
这里是所需实现的半伪代码。
def submit_vote
# Get BallotID
BallotID = Ballot.order("created_at").last.BallotID+1
#Loop through all preferences
@submitted_preferences.each do |preference|
Vote.create(
:candidateid => <The respective CandidateID>,
:BallotID => BallotID,
:preference => preference
)
end
redirect_to root_path
end
我想知道是否有任何方法可以正确地实现这个功能 抱歉问题太长,谢谢你:)
也许你想做的是一个... ... check_box_tag 而不是select_tag。查看我发的文档链接中的注释部分,了解更多关于如何使用集合的信息。