我正在使用CarrierWave并且能够移除图片,我需要允许不属于用户的参数:
params.require(:user).permit(:first_name, :last_name, :description, :picture, :remove_picture)
它给了我错误,但将其更改为:
params.permit(:first_name, :last_name, :description, :picture, :remove_picture)
正如在论坛上的一个主题中所建议的那样,也给出了错误 - “未经许可的参数提交,id”等。我怎样才能要求用户同时允许remove_picture?
答案 0 :(得分:2)
您应该将remove_picture
属性嵌套在用户下,如readme中的示例所示:
<%= form_for @user, html: { multipart: true } do |f| %>
<p>
<label>My Avatar</label>
<%= image_tag(@user.avatar_url) if @user.avatar? %>
<%= f.file_field :avatar %>
</p>
<p>
<label>
<%= f.check_box :remove_avatar %>
Remove avatar
</label>
</p>
<% end %>
那会让你做到
params.require(:user)
.permit(:first_name, :last_name, :description, :picture, :remove_picture)
Rails质量分配保护基本上只是哈希切片:
.require
从哈希中提取一个密钥,如果不存在则会引发错误。.permit
返回允许的键,并将散列标记为可以安全进行质量分配。它处理嵌套在单个param键下或根目录下的哈希。虽然你可以疯狂地合并两个哈希:
p = params.require(:user)
.permit(:first_name, :last_name, :description, :picture)
p.merge!(params.permit(:remove_picture))
你只是为自己制造问题。