select_tag在循环中。Rails上的Ruby

问题描述 投票:0回答:1

在大学作业中,我们正在用ruby on rails创建一个网站,允许用户通过选票页面为选举投票。这个选票看起来和真实选举中使用的选票一模一样。

下面是一张选票表格的图片。

enter image description here视图中的党派和候选人是通过数据库中的候选人表(有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

我想知道是否有任何方法可以正确地实现这个功能 抱歉问题太长,谢谢你:)

ruby-on-rails ruby forms haml
1个回答
-1
投票

也许你想做的是一个... ... check_box_tag 而不是select_tag。查看我发的文档链接中的注释部分,了解更多关于如何使用集合的信息。

© www.soinside.com 2019 - 2024. All rights reserved.