いくつかの情報を一時的に追跡するために、簡単にダウンして汚れたアプリをまとめました。パスワードを平文で保存しないでください。これは一般向けではなく、非常に安全な内部ボックスにあります。誰もそれに到達しておらず、ページにアクセスすることはできませんが、短いリストにしかアクセスできません. とにかく... レコードを編集すると、データベースから値を読み取ったときに更新によって編集されていないレコード フィールドが空白として保存される理由を理解しようとしています。この場合、インデックス ビューからレコードを選択します。パスワード フィールドには触れずに、そのレコードを編集します。記録を保存します。ログからわかるように、フィールドは空白です。
フォームコード
<%= 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 %>
コントローラ
PUT /swiftinfo/1
PUT /swiftinfo/1.json
def update
@swiftinfo = Swiftinfo.find(params[:id])
@swiftinfo.staffid = @staffid
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
ログ
Started PUT "/swiftinfo/10" for 192.168.207.200 at 2013-05-17 16:46:57 -0700
Processing by swiftinfoController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"tYo36rKCPtiplb+qLuF8QpcITXD/b0K869LNhakfOdg=", "swiftpwd"=>{"customername"=>"Customer name ", "emailaddr"=>"user@domain.net", "password"=>"[FILTERED]", "phone"=>"", "notes"=>"Note"}, "commit"=>"Submit", "id"=>"10"}
Swiftinfo Load (0.1ms) SELECT "swiftinfo".* FROM "swiftinfo" WHERE "swiftinfo"."id" = ? LIMIT 1 [["id", "10"]]
(0.1ms) begin transaction
(0.3ms) UPDATE "swiftinfo" SET "password" = '', "notes" = 'Note', "updated_at" = '2013-05-17 23:46:57.586414' WHERE "swiftinfo"."id" = 10
(169.7ms) commit transaction
Redirected to http://192.168.1.52:7779/
Completed 302 Found in 211ms (ActiveRecord: 170.2ms)
@anonymousxxx - はい、編集されて空白になっている場合は、簡単に答えてください。しかし、それが問題です。編集時にフィールドが空白ではないか、そうであってはなりません。index.html.erb でユーザーのパスワードをマスクします (swiftinfo.password の値はレンダリングせず、単に「*****」を表示します。テストのために、パスワードの値 (swiftinfo.password) を表示します < %= swiftinfo.password %> そして確かに、パスワードがあります. したがって、そのレコード (またはレコード) を編集すると、パスワードには値が含まれます. したがって、そのフィールドを編集せずに別のフィールドを編集すると、 、またはフィールドがない場合、更新により、編集済みまたは元の現在の値がテーブルに保存されます。
アップデート:
わかりました、私は問題をこれに切り分けました:
<%= f.password_field :password %> - Browser displays blank, record is saved with a blank value
%= f.text_field :password %>
パスワードのクリアテキストを表示しますが、record は正しい値 (現在または変更された値) をテーブルに保存します。