我正在运行此函数,我知道它被调用因为redirect_to正在运行。但出于某种原因,@ user不是!如果它有帮助,@ user是基于设计的。
def make_feed_preference
@user = current_user
#@user.feed_preference = params[:preference]
@user.feed_preference = "time"
@user.name = "Shoo Nabarrr"
@user.karma = 666
@user.save
redirect_to '/posts'
答案 0 :(得分:2)
您对此用户有任何验证吗?他们可能阻止了这个save
。无论redirect_to
是否通过,都会调用save
。
我建议这样做:
if @user.save
redirect_to '/posts'
else
render :feed_preference
end
其中:feed_preference
是用户输入其Feed偏好的表单。
答案 1 :(得分:0)
在某些情况下,即使记录存在验证问题,我也希望确保更新记录上的标记或其他字段。 (但是,对于未经验证的用户输入,我永远不会这样做。)你可以这样做:
def make_feed_preference
case params[:preference]
when 'time', 'trending_value', 'followers'
current_user.update_attribute 'feed_preference', params[:preference]
flash[:notice] = 'Your feed preference has been updated.'
else
flash[:notice] = 'Unknown feed preference.'
end
redirect_to '/posts'
end