1

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

  • 管理员向数据库询问用户列表
  • 管理员指定给每个用户的金额
  • DB将指定金额添加到每个用户的帐户并保存

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

  1. 如何优雅地处理来自用户的不确定数量的输入(目前,我在所有用户上使用 for 循环生成表单)
  2. 如何将一个动作中使用的变量发送到另一个动作(目前,我使用的是 hidden_​​field_tag,但我觉得有点麻烦)
  3. 是否有办法避免调用 .to_i、.to_s、.to_f (因为这似乎完全没有必要)
  4. 如何通过减少不必要的数据库查询来最大化性能(目前,我将用户的大小存储在@size 中)

我最重要的问题是#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 %>
4

0 回答 0