简单更新控制器在dev / test中工作,但在生产中失败

时间:2018-02-08 05:57:11

标签: ruby-on-rails activerecord

我有一个页面,用户可以通过电子邮件中的身份验证令牌更新其个人资料的有限部分(想想更新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有效?

1 个答案:

答案 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