Метод типа, влияющий на проблему столбца типа базы данных - PullRequest
1 голос
/ 10 июля 2010

Я использую Ruby on Rails и paths_of_glory драгоценный камень

Мне нужен доступ к типам достижений, которые выполняет пользователь, чтобы отобразить картинку вместе с каждым конкретнымдостижение.Когда я пытаюсь получить к нему доступ через @user.achievements.type, я получаю сообщение об ошибке, в котором говорится, что он хочет вернуть «массив» (поскольку в достижениях это массив) вместо того, чтобы фактически возвращать элементы в столбце типа моей базы данных.

Поскольку у каждого объекта ruby ​​есть метод с именем type, мой вызов для доступа к столбцу типа базы данных не выполняется.Когда я пытаюсь изменить запись в таблице, гем paths_of_glory говорит, что для правильной работы ему нужен столбец типа.

Я не совсем уверен, куда идти, чтобы получить доступ к этому.столбец в базе данных.Есть предложения?

1 Ответ

3 голосов
/ 10 июля 2010

Не совсем уверен, что вы спрашиваете здесь, но, возможно, это поможет.

Прежде всего, @user.achievements - это массив, потому что у вас есть несколько достижений, а метод type предназначен для отдельных элементов.@user.achievements, поэтому это не сработает.Вам нужно будет сделать что-то вроде этого:

@user.achievements.each do |achievement|
  # Do stuff here
end

Что касается столбца type, тип - это зарезервированный столбец в Rails, используемый специально для наследования одной таблицы, где несколько моделей Rails используют одну таблицу базы данных.Таким образом, вы не можете получить к нему доступ напрямую.Я предполагаю, что paths_of_glory использует STI в некотором роде.Вы можете получить доступ к классу модели с помощью что-то вроде achievement.class, затем, если вам нужно только имя, вы можете попробовать achievement.class.to_s.

@user.achievements.each do |achievement|
  model = achievement.class # => MyAwesomeAchievementClass
  @image = model.picture    # You could write some method in the model like this
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...