Краткая версия (фиктивный код):
Итак, у меня есть один класс ActiveRecord (модель rails):
class User < ActiveRecord::Base
attr_accessor :somevar
end
Когда я делаю
@u=User.find(1)
@u.somevar = 1
я получил
undefined method `somevar=' for #<Class:0x007fa8cd0016a8>
У меня нет в базе данных столбца с именем somevar
Я перезапустил rails server
после добавления attr_accessor
(на всякий случай)
Все еще получаю чертову ошибку.
много погуглил!
Где может быть ошибка? Есть предположения?
Я ценю все ответы! Спасибо!
Длинная версия (с актуальным кодом)
Я использую Devise для управления своими пользователями. Также я пытаюсь добавить условие по умолчанию для фильтрации результатов на некоторых моделях. Это основано на «company_id», который находится в модели пользователя. Я попытался использовать переменную сеанса в default_scope
и нашел это. По сути, это говорит о том, что использовать переменные сеанса для условий по умолчанию — плохая практика, и я мог бы использовать Devise и добавить некоторые модификации.
Это привело к тому, что мой User model
стал
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
attr_accessor :current_company
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :company
end
И мой ApplicationController
class ApplicationController < ActionController::Base
around_filter :scope_current_user
def scope_current_user
User.current_company = current_user.company_id
yield
ensure
#avoids issues when an exception is raised, to clear the current_id
User.current_company = nil
end
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
end
Затем он поднимается от ApplicationController
undefined method `current_company=' for #<Class:0x007fa8cd0016a8>
То же самое произойдет, если я определяю методы вручную:
def current_company
@current_company
end
def current_company=(new_val)
@current_company = new_val
end
@u=User.find(1)
возвращает ожидаемый результат? - person Tamer Shlash   schedule 03.06.2014ApplicationController
. Я обновил свой вопрос и включил фактический исходный код. - person Andreas Storvik Strauman   schedule 03.06.2014