9

हाय मैं एक सत्यापन सेट अप करने की कोशिश कर रहा हूं जिसे केवल एक विशिष्ट रूप में देखा जाता है, ऐसा करने के लिए मैं फ़ॉर्म पर वर्चुअल एट्रिब्यूट के लिए छुपा_फील्ड बनाने की कोशिश कर रहा हूं और इसे किसी मान पर सेट करें, फिर मान्य करें: यदि वर्चुअल विशेषता मान के बराबर होती है।रेल 3: इसके साथ सत्यापन बनाना: यदि कथन

अब तक मेरे पास है:

## user model 

validates_presence_of :password_confirmation, :if => :confirmation_validation 

attr_accessible :email, :password, :password_confirmation, 
:remember_me, :name, :avatar, :username, :bio, :confirmation_validation 

def confirmation_validation 
# not sure what goes here??? 
end 


## form view 


<%= form_for(resource, :validate => true, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }, :html => {:multipart => true}) do |f| %> 
<%= devise_error_messages! %> 

<p><%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br /> 
<%= f.password_field :password %></p> 

<p><%= f.label :password_confirmation %><br /> 
<%= f.password_field :password_confirmation %> 
<% f.hidden_field :confirmation_validation, :value => 100%></p> 

<p><%= f.submit "Update" %></p> 
<% end %> 

उत्तर

14

confirmation_validation छिपा फ़ील्ड का मान params हैश में शामिल किया जाना चाहिए, और यह भी तदनुसार आभासी विशेषता निर्धारित किया है। इसलिए, आप शायद बस की जांच कर सकते हैं या नहीं, मूल्य निर्धारित किया गया है:

validates_presence_of :password_confirmation, :if => :should_confirm? 

def should_confirm? 
    confirmation_validation == '100' # Value of the hidden field as set in the form 
end 
+0

अरे, ऊपर मेरे लिए एक त्रुटि दिखाई दे रहा है और त्रुटि नीचे दी गई है। प्रसंस्कृत गुणों को बड़े पैमाने पर असाइन करें। क्यूं कर? –

+1

@ राजेश जोड़ें: your attr_accessible पर password_confirmation। – scarver2

1

यह प्रतिक्रिया बहुत देर से, लेकिन भविष्य के लिए दर्शकों को तो, मैं इस सवाल का जवाब @Rajesh सवाल

को लगता है अरे , उपर्युक्त मेरे लिए एक त्रुटि दिखा रहा है और त्रुटि नीचे दी गई है। कैंट द्रव्यमान-सुरक्षित गुणों को असाइन करें। क्यूं कर?

क्या आपको उस छिपे हुए फ़ील्ड को हटाने की आवश्यकता है जिसे आप रिकॉर्ड को सौंपने से पहले पैराम्स हैश से ध्वज के रूप में उपयोग कर रहे हैं।

params.reject{|p| p == name_of_hidden_field} 
5

एक लाइन कोड लिखें, यह आपको सरल रूप से अपना कोड व्यवस्थित करने में मदद कर सकता है।

validates_presence_of :password_confirmation, :if => lambda {|u| confirmation_validation == '100'} 

या

validates_presence_of :password_confirmation, :if => Proc.new {|u| confirmation_validation == '100'}