इसलिए मुझे लॉगिन, ईमेल पता, पासवर्ड, पासवर्ड पुष्टिकरण, नाम, अवतार (चित्र) इत्यादि के साथ एक उपयोगकर्ता मॉडल मिला है। पहले 5 पर सत्यापन हैं, मूल रूप से यह बताते हुए एक नया मॉडल बनाने के लिए सभी 5 मौजूद हैं।रेल - अपडेट_एट्रिब्यूट्स सत्यापन के खिलाफ आ रहे हैं
हालांकि, इससे मेरे लिए समस्याएं होती हैं जहां अपडेट संबंधित हैं।
मेरे पास एक संपादन पृष्ठ है, जहां उपयोगकर्ता केवल अपना नाम और अवतार संपादित कर सकता है। मैं वर्तमान में उन्हें अपना लॉगिन बदलने की इच्छा नहीं कर रहा हूं, और मैं एक अलग पृष्ठ से ईमेल और पासवर्ड बदलना चाहता हूं। ,
<% form_for @user, :html => { :multipart => true } do |u| %>
<p>
<label>Name:</label>
<%= u.text_field :name %>
</p>
<p>
<label>Avatar:</label>
<%= display_user_avatar %>
<%= u.file_field :avatar%>
</p>
<p>
<%= submit_tag %>
</p>
<% end %>
अगर मैं एक @user.update_attributes(params[:user])
करने का प्रयास है, तो है क्योंकि केवल 2 पैरामीटर name
और avatar
हैं, अद्यतन, विफल रहता है पासवर्ड की तरह सामान, पासवर्ड की पुष्टि के बाद से:
तो संपादित करें प्रपत्र इस तरह दिखता है ईमेल, आदि प्रविष्टि को मान्य करने के लिए आवश्यक हैं, और वे बस उस रूप में मौजूद नहीं हैं।
मैं @user.update_attribute(:name, params[:user][:name])
कर कर इसे प्राप्त कर सकता हूं, लेकिन फिर मुझे चिंता है कि मान्यताओं से परहेज करना एक अच्छा बात है या नहीं। विशेष रूप से पासवर्ड अपडेट जैसे कुछ के संबंध में, जहां मैं को नया पासवर्ड सत्यापित करने की आवश्यकता है।
क्या कोई और तरीका है?
और अगर मैं :name
और :avatar
के लिए इस update_attribute बस का उपयोग कर रहे थे, मैं इसे कैसे करने के बारे में जाना होगा?
क्या यह काम करेगा?
params[:user].each do |attribute|
@user.update_attribute(attribute, params[:user][attribute])
end
क्या यह ऐसा करने का एक स्वीकार्य तरीका है ...?
--edit अनुवर्ती कार्रवाई के रूप में -
Okie, मैंने कोशिश की के रूप में आप का सुझाव दिया और
किया तो यह !
संस्करण कर रहा है, और अपवाद & ब्राउज़र में प्रदर्शित पकड़ा है:
Validation failed: Password is too short (minimum is 5 characters)
सर्वर लॉग में जानकारी है:
012,Processing UsersController#update (for 127.0.0.1 at 2010-07-18 11:56:59) [PUT]
Parameters: {"user"=>{"name"=>"testeeeeee"}, "commit"=>"Save changes", "action"=>"update", "_method"=>"put", "authenticity_token"=>"BMEGRW/pmIJVs1zlVH2TtZX2TQW8soeCXmMx4kquzMA=", "id"=>"tester", "controller"=>"users"}
Urm। इसे देखकर, मुझे अभी एहसास हुआ कि यह "id"=>"tester"
सबमिट कर रहा है। अब, मेरे पास मेरे मार्ग स्थापित हैं ताकि उपयोगकर्ता उपयोगकर्ता नाम के बजाय उपयोगकर्ता लॉगिन नाम दिखा रहा हो ... क्या ऐसा हो सकता है? यह user_id == tester
वाले उपयोगकर्ता को अपडेट करने का प्रयास कर रहा है, लेकिन चूंकि यह अस्तित्व में नहीं है, इसलिए यह इसके बजाय एक बनाने का प्रयास करता है? क्या वास्तव में कुछ ऐसा है जो मैं मार्ग के कारण गलत कर रहा हूं?
हमम ...रेक मार्गों मुझसे कहता है कि मार्ग है:
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
और मैं user.rb
फ़ाइल में ऐसे ही मार्ग की स्थापना:
def to_param
"#{login}"
end
लेकिन यह निश्चित रूप login
यह सब समय id
के बजाय प्रदर्शित किया गया है। लेकिन मैं अपडेट एक्शन, @user = User.find_by_login(params[:id])
की शुरुआत में भी सही कर रहा हूं, और फिर @user
अपडेट कर रहा हूं।
मैं बहुत उलझन में हूं। >। <
दूसरा अद्यतन:
मेरे User.rb
सत्यापन सामान इस प्रकार हैं:
validates_length_of :login, :within => 3..20
validates_length_of :password, :within => 5..20
validates_presence_of :login, :email, :password, :password_confirmation, :salt, :name, :on => :create
validates_uniqueness_of :login, :case_sensitive => false
validates_confirmation_of :password
validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => "format is invalid."
attr_accessor :password, :password_confirmation
और hashed_password अनुभाग यहाँ है:
def password=(pass)
@password = pass
self.salt = User.random_string(10) if !self.salt?
self.hashed_password = User.encrypt(@password, self.salt)
end
u.attributes
मुझे देता है
>> u.attributes
=> {"salt"=>"NHpH5glxsU", "name"=>"test er", "avatar_updated_at"=>nil, "updated_at"=>Sat Jul 17 07:04:24 UTC 2010, "avatar_file_size"=>nil, "avatar_file_name"=>nil, "hashed_password"=>"84f8675c1ed43ef7f8645a375ea9f867c9a25c83", "id"=>1, "avatar_content_type"=>nil, "login"=>"tester", "email"=>"[email protected]", "created_at"=>Fri May 07 10:09:37 UTC 2010}
Urmmm ... ठीक है, तो यह है कि तुम क्या कहा, आभासी विशेषता password
वास्तव में अस्तित्वहीन जा रहा है ... तो मैं चारों ओर कि मिलता है के बारे में है? बगजर, मैंने सोचा कि मैं अपने प्रमाणीकरण कोड के साथ स्मार्ट फिडलिंग कर रहा था ...
उन प्रमाणीकरण प्लगइन में से किसी एक को बदलने में कितना आसान है? क्या मुझे एक नया उपयोगकर्ता मॉडल बनाना होगा? या प्लगइन मेरे वर्तमान के साथ काम करने में सक्षम होना चाहिए?
अब तक सभी मदद के लिए धन्यवाद, बीटीडब्ल्यू! : डी
पीएस: हाँ, '
जो आप वर्णन कर रहे हैं वह मेरे लिए बिल्कुल सही नहीं है। मुझे पूरा यकीन है कि यदि आप 'हैश' के साथ 'update_attributes' करते हैं तो केवल गुणों का आंशिक सेट होता है, तो अन्य सभी विशेषताओं के साथ छोड़ दिया जाता है उनके पिछले मानों का अर्थ है कि सत्यापन विफल नहीं होना चाहिए। – mikej