我在 Rails 中工作,以允许管理员向用户提供虚构资金。在我看来,有以下步骤:
- 管理员向数据库询问用户列表
- 管理员指定给每个用户的金额
- DB将指定金额添加到每个用户的帐户并保存
我有一个有效但不优雅的代码。我想知道处理这种情况的正确“Rails”方法是什么。具体来说,我正在就以下几点寻求您的帮助:
- 如何优雅地处理来自用户的不确定数量的输入(目前,我在所有用户上使用 for 循环生成表单)
- 如何将一个动作中使用的变量发送到另一个动作(目前,我使用的是 hidden_field_tag,但我觉得有点麻烦)
- 是否有办法避免调用 .to_i、.to_s、.to_f (因为这似乎完全没有必要)
- 如何通过减少不必要的数据库查询来最大化性能(目前,我将用户的大小存储在@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 %>