我有一个页面,用户可以通过电子邮件中的身份验证令牌更新其个人资料的有限部分(想想更新Twitter通知而无需登录)。
它适用于开发和测试,但在生产时它无法更新值(但不会引发异常)。
有两种控制器方法,Show的方法会选择人员退出电子邮件。 Update方法是一个复选框切换,允许他们选择加入或退出。第一个,Show方法,适用于生产。第二种方法,即Update one,不会。
def show
if attribute = params[:opt_out_attr]
user.update!("#{attribute}": false)
end
end
def update
user.update!(update_params)
redirect_to users_limited_edit_path
end
我能找到的另一个不同之处在于检查网络日志是否在开发中,提交表单以302响应并在生产时,它以301响应。
任何想法为什么这只会在制作中失败,即使Show有效?
答案 0 :(得分:0)
Offtopic。
根据经验,不要使用params中的内容构建模型属性。可以添加谁知道这些参数中的内容并弄乱你的应用程序。
# NO
if attribute = params[:opt_out_attr]
user.update!("#{attribute}": false)
end
# YES - something like this
if attribute = permitted_attribute?(params[:opt_out_attr])
user.update_attribute(attribute, false)
end
def permitted_attribute?(param)
User.new.attributes.keys.include?(param)
end