代码之家  ›  专栏  ›  技术社区  ›  Mark

保存Rails窗体时出现问题

  •  0
  • Mark  · 技术社区  · 15 年前

    我有一个RubyonRails页面来编辑用户配置文件。表单正确显示用户名和电子邮件。当我更改文本框中的名称并单击“更新”时,我会返回到“编辑配置文件”页面,并显示消息“配置文件已成功更新”。问题是我将名称更改为“未保存到数据库”的值。

    没有错误,服务器输出中的参数看起来正确。

    正在处理用户控制器更新(用于 127.0.0.1 2009-05-19 22:00:48[输入]参数: “user”=>“name”=>“新名称”, “email”=>“test@test.com”, “commit”=>“更新”, “action”=>“更新”,“&u method”=>“放置”, “真实性标记”=>“59C79FA90AAF5558AAB8CDEF6ACB7A4C7C55C3”, “id”=>“1”,“controller”=>“用户”

    我错过了什么?

    编辑\u profile.html.erb

    <% form_for @profile, :url => {:action => "update", :id => @profile} do |f| %>
      <%= f.error_messages %> 
      <p>Name: <%= f.text_field :name %></p>
      <p>Email: <%= f.text_field :email %></p>
      <%= f.submit "Update" %>
    <% end %>
    

    用户控制器.rb

      def edit_profile
        @profile = User.find(current_user.id)
      end
    
      def update
        @profile = User.find(params[:id])
         respond_to do |format| 
            if @profile.update_attributes(params[:profile])  
              flash[:notice] = 'Profile was successfully updated.'  
              format.html { render :action => 'edit_profile' }         
            else
              flash[:notice] = 'Profile Error.'
              format.html { render :action => "edit_profile" }         
            end  
          end
      end
    

    编辑: 是的,这是一个命名问题,为了解决这个问题,我改变了…

    if @profile.update_attributes(params[:profile])
    

    if @profile.update_attributes(params[:user])
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Toby Hede    15 年前

    字段的名称与传递给update_attributes方法的名称不匹配。

    检查表单字段的名称(使用firebug),将是“名称”等。

    但您正在传递一个名为“params”的数组:

    update_attributes(params[:profile])  
    

    您的表单字段应该称为“profile[name]”,这样才能正常工作。

    如果您检查development.log,应该会看到从未调用任何更新。