Ruby Rails只有一些参数传递给控制器

时间:2012-05-05 05:21:32

标签: ruby-on-rails ruby

我有一种形式的用户属性,大约有60个字段,通过在一个页面上切换隐藏的div来单独显示。更新其他人的个人资料时,所有字段都会按预期更新。更新当前登录的配置文件(current_user)时,只有大约40个字段更新。这是我在current_user配置文件的更新方法上观察到的内容:

在@user = User.find(params [:id])之后直接设置断点并查看已通过的参数时,60个表单字段参数中只有大约40个存在。存在的那些按预期更新,显然那些不存在的那些不会更新。

有什么可能导致这种奇怪行为的线索?

示例:用户/ _form.erb上的许多错误行为表单字段之一

<%= f.text_field :street_address, :placeholder => 'address..'  %>

users_controller.rb中的更新方法

# UPDATE
  def update   
    @user = User.find(params[:id])
    breakpoint_set = on_this_line
    respond_to do |format|     
      if @user.update_attributes params[:user]
        format.html do
          redirect_to("/users", :notice => 'User Profile was successfully updated.')
          format.xml  { head :ok }
        end
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end
  end

2 个答案:

答案 0 :(得分:2)

如果&#34;当前登录用户&#34;只是一个User对象,然后我怀疑你看到了缓存的副作用。

如果您有两个表示相同记录的Active Record对象,并且他们不同意该记录的状态应该是什么,则可能发生不同类型的问题。例如;

@u1 = User.find logged_in_user_id
@u2 = User.find logged_in_user_id

@u1.update_attributes :username => "root"

@u2.username   # old username
@u2.reload
@u2.username   # "root"

确保不会发生这种情况。

答案 1 :(得分:1)

检查参数是否从客户端移植到控制器。您可以检查这将是Firefox + Firebug控制台。

并检查每个参数是否都在用户哈希下,因为缺少的参数可能不会出现在同一个用户哈希中(Rails控制器正在查看)。