attr_accessor
не создает метод класса, он создает методы экземпляра.Поэтому, учитывая ваш код, он должен работать так:
@user = User.new
@user.foo = "bar"
Редактировать:
Однако, если вы хотите создать пользовательские методы, вы можете сделать что-то вроде этого:
class User < ActiveRecord::Base
def self.add_accessor(attr)
define_method(attr) do
instance_variable_get("@#{attr}")
end
define_method("#{attr}=") do |val|
instance_variable_set("@#{attr}",val)
end
end
А потом вы звоните с контроллера:
User.add_accessor "foo"
@user = User.new
@user.foo = "bar"