“Rails”方式将未指定数量的用户输入提交到params

时间:2013-07-09 16:54:42

标签: ruby-on-rails forms input hidden-field

我在Rails工作,允许管理员为用户提供虚构资金。在我看来,有以下步骤:

  • 管理员要求数据库提供用户列表
  • 管理员指定给予每个用户的金额
  • 数据库将指定金额添加到每个用户的帐户并保存

我有一个有效但不优雅的代码。我想知道接近这种情况的正确“Rails”方式是什么。具体来说,我正在寻求你的帮助,有以下几点:

  1. 如何优雅地处理来自用户的不确定数量的输入(目前,我使用for循环对所有用户生成表单)
  2. 如何将一个动作中使用的变量发送到另一个动作(目前,我使用的是hidden_​​field_tag,但我发现它有点麻烦)
  3. 是否有办法避免调用.to_i,.to_s,.to_f(因为它似乎没必要)
  4. 如何通过减少不必要的数据库查询来最大化性能 (目前,我将用户的大小存储在@size中)
  5. 我最重要的问题是#1和#2。我将不胜感激任何提示/帮助。非常感谢你!

    #This the action in the controller corresponds to the first bullet point 
    def index
        @users = User.all
        @size = @users.length
    end
    
    #This the action in the controller corresponds to the third bullet point
    def provide_currency
        array = *(1..params[:size])
        for i in array
            user = User.find(i)
            user.money += params[i.to_s].to_f
            user.save
        end
        redirect_to admin_path
    end
    
    #This is the index.html.erb that corresponds to the second bullet point
    <%= form_tag provide_currency_path do %>
    <table class="table table-striped table-condensed">
        <thead>
          <tr>
            <th>User</th>
            <th>E-mail</th>
            <th>New endowment</th>
          </tr>
        </thead>
        <tbody>
          <% for user in @users %>
          <tr>
            <td><%= user.name%></td>
            <td><%= user.email%></td>  
            <td>
                <%= number_field_tag (user.id) %>
            </td>     
          </tr>
          <% end %>
        </tbody>
    </table>
    <%= hidden_field_tag "size", @size %>
    <%= submit_tag "Provide", :class => "btn" %>
    <% end %>
    

0 个答案:

没有答案