新しいレールの種類で、私はdeviseを使用していません。私の問題は、自分のパスワードに自分のフォームにpassword_fieldを使用し、subscriber_numberだけを更新すると、パスワードがデータベースで空白になることです。パスワードにtext_fieldを使用すると、実際の値を表示して保存することができます。これは私がやろうとしているものです:Railsパスワードは空白の場合はnilを返します。
class EdiUser < ActiveRecord::Base
validates_presence_of :subscriber_number
validates_presence_of :password, :on => :create
end
と私のコントローラで:
def update
@trader_edi_user = TraderEdiUser.find(params[:id])
@edi_user = EdiUser.find(@trader_edi_user.edi_user_id)
#@edi_user.update_attributes(edi_user_params)
if params[:edi_user][:password].blank? == true
@edi_user.update_attributes(edi_user_subscriber_number)
else
@edi_user.update_attributes(edi_user_params)
end
redirect_to :back
end
private
def edi_user_params
params.require(:edi_user).permit(:id, :subscriber_number, :password, :password_confirmation)
end
def edi_user_subscriber_number
params.require(:edi_user).permit(:subscriber_number)
end
、これが私のフォームです:
<%= form_for(@edi_user, url: {controller: 'maintenance/edi_users', action: 'update'}, html: {class: "form-horizontal", id: "edit_edi"}) do |f| %>
<div class="form-group edi subs">
<label class="col-sm-3 control-label has-feedback">Subscriber Number</label>
<div class="col-sm-9">
<%= f.text_field :subscriber_number, :class => "form-control req", :required => 'true', :id => "subscriber" %>
<br>
</div>
</div>
<div class="form-group edi pass">
<label class="col-sm-3 control-label has-feedback">Password</label>
<div class="col-sm-9">
<%#= f.text_field :password, :class => "form-control", :id => "password", :minlength => 6 %>
<%= f.password_field :password, :class => "form-control", :id => "password" %>
<br>
</div>
</div>
<div class="form-group edi confirm_pass">
<label class="col-sm-3 control-label has-feedback">Confirm Password</label>
<div class="col-sm-9">
<%= f.password_field :password_confirmation, :class => "form-control", :id => "confirm_password", data: { :match => "#password"} %>
<br>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="pull-right">
<%= button_tag type: "submit", class: "btn btn-md btn-success raised pull-right", id: "update_btn2" do %>
<i class="fa fa-check" aria-hidden="true"></i> <%= t('Button.Update') %>
<% end %>
</div>
</div>
</div>
<% end %>
は、上の私の更新アクションのための私のコードです私のコントローラが間違っている?私は行方不明の何かがありますか?
は、私はまだセキュリティ上の理由から、工夫のようなものを使用することができ助言する
def update
@trader_edi_user = TraderEdiUser.find(params[:id])
@edi_user = EdiUser.find(@trader_edi_user.edi_user_id)
edi_user_params.reject! {|k, v| v.blank?}
if @edi_user.update_attributes(edi_user_params)
# Success
else
# Error
end
redirect_to :back
end
private
def edi_user_params
params.require(:edi_user).permit(:id, :subscriber_number, :password, :password_confirmation)
end
、あなたが空白のparamsを拒否することができ、事前に非常に
だけ確かに.....平文でパスワードを保管していないと教えてください。 –
nope。私はパスワードを保存するためにattr_encryptedを使用しています –
'user_name'はあなたのフォームにもあなたのコードにもありません。どのように更新しますか? –