Ruby on rails Rails Activerecord更新将未编辑字段保存为空

Ruby on rails Rails Activerecord更新将未编辑字段保存为空,ruby-on-rails,Ruby On Rails,我已经组装了一个快速下线和肮脏的应用程序来跟踪一些临时信息。我知道,不要用明文存储密码。这不是面向公众的,而是在一个内部盒子上,非常安全;没有人可以访问它,而且该页面无法访问,只能访问一个简短的列表。无论如何我试图弄明白为什么在编辑记录时,更新会将一个未编辑的记录字段保存为空白,当从数据库中读取该字段时,该字段带有一个值。在本例中,我从索引视图中选择了一条记录。我编辑了那条记录,没有触及密码字段。我保存记录。从日志中可以看到,该字段为空 表格代码 <%= form_for(@swi

我已经组装了一个快速下线和肮脏的应用程序来跟踪一些临时信息。我知道,不要用明文存储密码。这不是面向公众的,而是在一个内部盒子上,非常安全;没有人可以访问它,而且该页面无法访问,只能访问一个简短的列表。无论如何我试图弄明白为什么在编辑记录时,更新会将一个未编辑的记录字段保存为空白,当从数据库中读取该字段时,该字段带有一个值。在本例中,我从索引视图中选择了一条记录。我编辑了那条记录,没有触及密码字段。我保存记录。从日志中可以看到,该字段为空

表格代码

    <%= form_for(@swiftpwd) do |f| %>
        <% if @swiftpwd.errors.any? %>
            <div id="error_explanation">
              <h2><%= pluralize(@swiftpwd.errors.count, "error") %> prohibited this swiftpwd from being saved:</h2>

              <ul>
              <% @swiftpwd.errors.full_messages.each do |msg| %>
                <li><%= msg %></li>
              <% end %>
              </ul>
            </div>
        <% end %>

        <div class="field">
            Customer Name<br />
            <%= f.text_field :customername %>
        </div>
        <div class="field">
            Email Address<br />
            <%= f.text_field :emailaddr %>
        </div>
        <div class="field">
            Password<br />
            <%= f.password_field :password %>
        </div>
        <div class="field">
            Phone Number<br />
            <%= f.text_field :phone %>
        </div>
        <div class="field"">
            Notes<br />
            <%= f.text_area(:notes, :size=>'50x10') %>
        </div>
        <div class="actions">
            <%= f.submit 'Submit' %>
        </div>
    <% end %>
日志

@匿名XXX-快速回答,是的,如果它被编辑和删除了。但问题是,当我编辑时,字段不是空的,或者不应该是空的。我屏蔽index.html.erb上用户的密码(我不呈现swiftinfo.password值,只显示“****”。为了测试,我显示了密码值(swiftinfo.password),实际上还有一个密码。因此,当我编辑该记录(或记录)时,同样,密码有一个值。因此,如果我不编辑该字段,而是编辑另一个字段,或者不编辑任何字段,则更新应将当前值(编辑的或原始的)保存到表中

更新:

好的,我已经将问题与此隔离:

<%= f.password_field :password %> - Browser displays blank, record is saved with a blank value
%= f.text_field :password %>
-浏览器显示空白,记录以空白值保存
%=f.text_字段:密码%>

显示密码明文,但record会将正确的值(当前值或更改值)保存到表中。

如果字段为空,并且您不想更新字段为空,则应在控制器上更新之前删除字段为空。请尝试以下操作:

def update
  @swiftinfo = Swiftinfo.find(params[:id])
  if params[:swiftinfo][:password].blank?
     params[:swiftinfo].delete(:password)
  end
  respond_to do |format|
    if @swiftinfo.update_attributes(params[:swiftinfo])
      format.html { redirect_to root_path, notice: 'Accounts was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { render action: "edit" }
      format.json { render json: @swiftinfo.errors, status: :unprocessable_entity }
    end
  end
end

如果密码字段为空,是否不更新密码字段?
<%= f.password_field :password %> - Browser displays blank, record is saved with a blank value
%= f.text_field :password %>
def update
  @swiftinfo = Swiftinfo.find(params[:id])
  if params[:swiftinfo][:password].blank?
     params[:swiftinfo].delete(:password)
  end
  respond_to do |format|
    if @swiftinfo.update_attributes(params[:swiftinfo])
      format.html { redirect_to root_path, notice: 'Accounts was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { render action: "edit" }
      format.json { render json: @swiftinfo.errors, status: :unprocessable_entity }
    end
  end
end