ruby-on-rails-3 - 这是否容易受到质量分配的影响?

  显示原文与译文双语对照的内容
0 0

我使用这里选项允许用户对某个条目投票:

 <% form_tag url_for(entry_votes_path(@entry)), :id => 'voting_form', :remote => true do %>
 <%= hidden_field_tag 'vote[user_id]', current_user.id %>
 <%= submit_tag 'Vote for this entry', :id => 'voting_button' %>
 <% end %>

这是我的控制器代码:

def create
 @entry = Entry.find(params[:entry_id])
 @vote = @entry.votes.build(params[:vote])
 respond_to do |format|
 if @vote.save
 format.html { redirect_to @entry }
 format.js
 end
 end
 end

我有两个问题

  1. 如何在不使用隐藏字段的情况下指定 current_user.id

  2. 而且我现在没有使用 attr_accessible 或者 attr_protected 来进行投票模型。 如何保护模型以确保某人不能创建大量的投票? 现在,选择模型中的所有字段都是由 params 哈希--设置的,应该使用 attr_protected

时间:原作者:3个回答

0 0

我现在不使用attr_accessible或者attr_protected来投票。

然后,根据定义,可以从查询字符串中进行质量分配。

在说attr_protected时,应该使用entry_id外键,然后在控制器中单独设置它?

一般来说,使用attr_accessible比attr_protected更好。 这是因为attr_accessible为批量分配建立了默认拒绝,并允许你定义白名单例外。 另一方面,attr_protected强制你列出特定的属性。 当你修改程序并添加一个新属性时,程序将失败,如果你需要白名单并忘记该属性。 换句话说,它不能安全地。 如果在attr_protected设置中添加新属性,即使该新属性应该包含在黑名单中,也会使程序工作。 换句话说,它不安全地失败。

这里的规则是保护任何属性,这些属性允许在查询字符串中设置。 如果你想防止插入新行,但可能需要保护新行,这可能是为了防止更改现有的字段的内容的能力。

关于这一点的一个很好的参考可以在 guides.rubyonrails.org 找到。

原作者:
...