Rails:即使我调用了@ user.save,也没有保存属性

时间:2011-09-01 00:32:17

标签: ruby-on-rails ruby ruby-on-rails-3

我正在运行此函数,我知道它被调用因为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'

结束

我自己修好了。我必须创建一个附加到用户的新类,以使其工作。洛尔。

2 个答案:

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