Survey.where(:keyword => 'foo')
возвращает массив результатов, поэтому вы действительно вызываете .inittxtmsg для массива, которого, очевидно, не существует.
Вы можете сделать что-то вроде:
Survey.where(:keyword => 'foo').first.inittxtmsg
, в котором он вызывает его для фактического объекта модели.
Или, если вы знаете, что существует только один опрос с ключевым словом = foo ... вы можете использовать метод find, чтобы вернуть только одну модельобъект:
s = Survery.find_by_keyword("foo")
s.inittxtmsg