我有一个直接从数据库返回信息的API,并注意到Rails正在存储utf8复选标记和真实性令牌。在保存之前删除它的最佳方法是什么?
{"achievements":[{"utf8":"✓","authenticity_token":"XDzrmNqNyt6OfhWpAzu3j7LhMd/sRcr/4oLsPxRMrDY=","achievement":"Big Guns",...
控制器代码示例:
def achievements
if params.include?(:ach)
@achievement = Achievement.new(params[:ach])
if @achievement.save
redirect_to action: :achievements and return
end
end
end
视图示例:
<%= form_tag '', multipart: true do %>
<div class="four columns">Name <input name="ach[achievement]" type="text" ></div>
<div class="five columns">Description <input name="ach[description]" type="text" ></div>
<% end %>
答案 0 :(得分:4)
我没有尝试写一篇长篇文章,而是注意3件事应该让你朝着正确的方向前进。如果它令人困惑,请发表评论并进一步解释:
utf8=✓
会插入到HTML中。params
对象交给您的模型。答案 1 :(得分:1)
您可以使用哈希类中的reject
方法从params哈希中删除密钥对。
示例:
hash.reject! {|k,_| k.to_s.eql?("utf8") || k.to_s.eql?("authenticity_token") }
答案 2 :(得分:0)
正如coreyward所提到的,在这种情况下,应该有选择地将params添加到模型中。
这就是最适合我的方式:
achievement_params = %w[achievement description]
@achievement = Achievement.new(params.select { |key,_| achievement_params.include? key })