Before_validate refactor question

Had this working until I refactored by putting into a hash and checking
for blank. Now I get the error: undefined method `key?’ for
nil:NilClass.

I’m still kind of new at this and would appreciate suggestions on what I
am missing…

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

Thanks,

Dave

Maybe you mean this?

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.gsub(/^(\W*?[a-z])/) { |m| m.upcase }
if !key.blank?
end
end

, 3 2013 ., 15:55:04 UTC+3 Ruby-Forum.com
User :

Michael Aleksandrovich wrote in post #1120515:

Maybe you mean this?

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.gsub(/^(\W*?[a-z])/) { |m| m.upcase }
if !key.blank?
end
end

, 3 2013 ., 15:55:04 UTC+3 Ruby-Forum.com
User :

Thanks!

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

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
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
:

But, even the following causes error: undefined method `key=’ for
#Question:0x007fcba5972f20

before_validation :capitalize_first_words

def capitalize_first_words
  [:question, :correct_ans_1, :correct_ans_2].each do|key|
      self.key = "x"
  end
end

key is still not being interpreted as “question” or “correct_ans_1”,
ect…
Could it be a scope issue? I am in the Question model.

Instance of Question doesn’t have attribute “key”.
If this is ActiveRecord, you maybe should make migration “add_column
:questions, :key, :string”, OR within class scope write “attr_accessor
:key”

, 4 2013 ., 15:17:47 UTC+3 Ruby-Forum.com User
:

Michael Aleksandrovich wrote in post #1120644:

Instance of Question doesn’t have attribute “key”.
If this is ActiveRecord, you maybe should make migration “add_column
:questions, :key, :string”, OR within class scope write “attr_accessor
:key”

, 4 2013 ., 15:17:47 UTC+3 Ruby-Forum.com User
:

I thought key was a variable containing the attribute. The instance of
Question should have the attribute contained in the variable… It just
doesn’t seem to be evaluating key.

I’m sure i’m missing something simple…

Any other possibilities?

Dave

On Sep 4, 2013, at 8:17 AM, Dave C. wrote:

But, even the following causes error: undefined method `key=’ for
#Question:0x007fcba5972f20

before_validation :capitalize_first_words

def capitalize_first_words
[:question, :correct_ans_1, :correct_ans_2].each do|key|
self.key = “x”

maybe

self.send(":#{key}=", “x”)

or:

self[key] = “x”

Not sure of either. But your instinct is correct, key isn’t being
evaluated before it is passed to the self reference, so you’re still
looking for a key method that isn’t there.

 end

end

key is still not being interpreted as “question” or “correct_ans_1”,
ect…
Could it be a scope issue? I am in the Question model.

Walter