[Rails] Re: before_validate refactor question
before_validation :capitalize_first_words
def capitalize_first_words
[:question, :correct_ans_1, :correct_ans_2, :correct_ans_3].each do |key|
self.key = key.to_s.gsub(/^(\W*?[a-z])/) { |m| m.upcase } if !key.to_s.blank?
end def capitalize_first_words
[:question, :correct_ans_1, :correct_ans_2, :correct_ans_3].each do |key|
self.key = key.to_s.gsub(/^(\W*?[a-z])/) { |m| m.upcase } if !key.to_s.blank?
end
Note the difference betweet self.key and key.
self.key calls method key on self.
key - is block local variable, which is instance of Symbol ( :question, :correct_ans_1 ...).
Symbol has not methods '.gsub' and '.blank?', so it must be converted to String to call '.gsub' and '.blank?'
среда, 4 сентября 2013 г., 1:03:10 UTC+3 пользователь Ruby-Forum.com User написал:
среда, 4 сентября 2013 г., 1:03:10 UTC+3 пользователь Ruby-Forum.com User написал:
Now giving error:
undefined method `key' for #<Question:0x007fdff26b7798>
In Question model:
before_validation :capitalize_first_words
def capitalize_first_words
[:question, :correct_ans_1, :correct_ans_2, :correct_ans_3].each
do |key|
self.key = self.key.gsub(/^(\W*?[a-z])/) { |m| m.upcase } if
!self.key.blank?
end
end
Am I missing something really quite simple?
Thanks
--
Posted via http://www.ruby-forum.com/.
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/8bd8a4a0-2626-4fe8-958c-64d8c9939a9e%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home