Давайте сначала поговорим о модели, которую вы хотели бы получить.Для меня это звучит так:
- Каждая статья может быть посещена / прочитана многими пользователями.
- Каждый пользователь может прочитать / посетить много статей.
- Этоклассическая
n:m
-ассоциация, которая обычно реализуется ассоциацией has-many-through.
Если это намерение, оно должно быть реализовано следующим образом:
class Article < ActiveRecord::Base
has_many :hits
has_many :users, :through => :hits
end
class Hits < ActiveRecord::Base
belongs_to :article, :class_name => "DataHit", :foreign_key => "article_id"
belongs_to :user
end
class User < ActiveRecord::Base
has_many :hits
has_many :articles, :through => :hits
end
Конечно, вы должны добавить миграции, которые гарантируют, что конечная модель БД будет выглядеть следующим образом:
- Hit имеет article_id и user_id, чтобы пользователи могли найти статьи, которые они прочитали
Если у вас реализована эта модель, она должна быть более простой.Тогда у вас есть такие операции, как: @article.users.contains(User.find(user_id))
.Взгляните на учебник по Ruby on Rails Guides , в котором объясняется, что такое отношение "есть много сквозных" и какие у них есть преимущества.
Было бы полезно, если вы попробуете сначалав консоли Rails.Для этого начните с:
- Запустите консоль rails в корневом каталоге вашего приложения:
rails c
- Введите там, например:
art = Article.find(1)
, чтобы получить статью сid. - Попробуйте, какие методы доступны:
art.methods.sort
, чтобы увидеть все методы, которые можно использовать.Если нет метода users
, вы сделали что-то не так с ассоциированием. - Попробуйте позвонить:
us = art.users
и посмотрите на результат.Это должен быть специфичный для рельсов объект, объект, который ведет себя как коллекция и понимает, как добавлять и удалять пользователей в эту коллекцию (со всем жизненным циклом рельсов).Ошибка, которую вы сейчас имеете, может означать разные вещи: - Ваша модель базы данных не соответствует вашим ассоциациям, определенным в Rails (я подозреваю, что).
- Некоторая незначительная настройка (где-то неправильно), которая мешает Rails.
Я надеюсь, что это даст вам некоторые подсказки, что делать дальше, я не думаю, что мы сможем решить проблему здесь раз и навсегда.