2015-04-11 2 views
4

У меня есть 2 таблицы. Я использую префикс таблицы x_.Activerecord, где условие с соединением без префикса имени таблицы

  1. пользователя (таблица x_users)
  2. комментарий (таблица x_comments)

Я хочу, чтобы узнать общее количество после внутреннего соединения.

Этот запрос работает нормально.

User.joins(:comments).where(x_comments: {something: 1}).count 

Как удалить x_ из условия, чтобы сделать этот вызов общим?

Модели

class User < ActiveRecord::Base 
    has_many :comments, dependent: :destroy 
end 

class Comment < ActiveRecord::Base 
    attr_accessible :something 
    belongs_to :user 
end 
+0

Является 'User.joins (: следует) .где (следующим образом: {что-то: 1}). Count' не работает? Ваша ассоциация пользователей с 'follow', поэтому она должна работать. – RAJ

+0

Опубликовать свои модели тоже – RAJ

+1

Вместо этого вы можете использовать 'Comment.table_name =>'. – BroiSatse

ответ

1

Как @BroiSatse уже упоминалось, Вы можете использовать ActiveRecord::Base.table_name, чтобы установить имя таблицы явно в модели и получить имя таблицы в запросе для типичности.

Вы запрос будет:

User.joins(:comments).where(Comment.table_name: {something: 1}).count 

Установка имени таблицы в явном виде:

class Comment < ActiveRecord::Base 
    self.table_name = "x_comments" 
end 

Вы можете переопределить table_name метод, как это:

class Comment < ActiveRecord::Base 
    def self.table_name 
    "x_" + super 
    end 
end 
Comment.table_name # => "x_comments" 
0

Рассмотрим написание условий, и пусть ActiveRecord обрабатывает псевдонимы таблицы для вас.

class User < ActiveRecord::Base 
    has_many :comments, dependent: :destroy 

    def self.for_comment_something(foo) 
    joins(:comments). 
    merge(Comment.for_something(foo)) 
    end 
end 

class Comment < ActiveRecord::Base 
    attr_accessible :something 
    belongs_to :user 

    def self.for_something(foo) 
    where(something: foo) 
    end 
end 

документация для ActiveRecord :: Relation # слияния является here.

Положите все это вместе, как

User.for_comments_something(1).count 
Смежные вопросы