[RUBY-ON-RAILS] has_many와 counter_cache : 통해
RUBY-ON-RAILShas_many와 counter_cache : 통해
난 그냥 counter_cache 필드와 같은 컨트롤러 모양을 만들었습니다.
@users = User.where(:sex => 2).order('received_likes_count')
User.rb의 연관은
has_many :received_likes, :through => :attachments, :source => :likes, :dependent => :destroy
협회를 통해 : 문제 counter_cache이 Like.rb의 belong_to에 선언하고, 내가 has_many입니다 그것이 얘기하는 방법을 모른다는 것이다.
belongs_to :user, :counter_cache => :received_likes
해결법
-
==============================
1.당신은 이전이
당신은 이전이
class Product has_and_belongs_to_many :categories end class Category has_and_belongs_to_many :products end
및 마이그레이션
class CreateCategoriesProducts < ActiveRecord::Migration def change create_table :categories_products, id: false do |t| t.references :category t.references :product end add_index :categories_products, [:category_id, :product_id] end end
이제 모든 변경
class Product has_many :categories_products, dependent: :destroy has_many :categories, through: :categories_products end class Category has_many :categories_products, dependent: :destroy has_many :products, through: :categories_products end
새로운 하나
class CategoriesProduct < ActiveRecord::Base # this model uses table "categories_products" as it is # column products_count is in the table "categories" belongs_to :category, counter_cache: :products_count belongs_to :product end
-
==============================
2.(지난 달)이 게시물 및 (2008)이 게시물에 따르면, 가능하지 않는 것 같습니다. 그러나 후자의 게시물 해결 방법에 대한 코드를 가지고 (복사 / 사용자의 편의를 위해 해당 링크에서 paste'd, 신용은 두 번째 링크 DEfusion로 이동)
(지난 달)이 게시물 및 (2008)이 게시물에 따르면, 가능하지 않는 것 같습니다. 그러나 후자의 게시물 해결 방법에 대한 코드를 가지고 (복사 / 사용자의 편의를 위해 해당 링크에서 paste'd, 신용은 두 번째 링크 DEfusion로 이동)
class C < ActiveRecord::Base belongs_to :B after_create :increment_A_counter_cache after_destroy :decrement_A_counter_cache private def increment_A_counter_cache A.increment_counter( 'c_count', self.B.A.id ) end def decrement_A_counter_cache A.decrement_counter( 'c_count', self.B.A.id ) end end
관통 => B (이는 방식 C가 B, A belongs_to B, A의 C has_many belongs_to위한
-
==============================
3.이것은 기본적으로 같은 일을 :
이것은 기본적으로 같은 일을 :
after_save :cache_post_count_on_tags def cache_post_count_on_tags tags.each {|t| tag.update_attribute(:posts_count, t.posts.size)} end
그리고 당신은 당신이 가지고 POSTS_COUNT 태그에 대한 열, 또는 무엇이든 연결을해야합니다.
from https://stackoverflow.com/questions/5256897/counter-cache-with-has-many-through by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 브라우저 감지 방법 레일 (0) | 2020.02.19 |
---|---|
[RUBY-ON-RAILS] 어떻게 레일에서 시험하기위한 기본 "www.example.com"도메인을 변경하려면 어떻게해야합니까? (0) | 2020.02.19 |
[RUBY-ON-RAILS] 많은 자기에 많은 참여 레일 (0) | 2020.02.19 |
[RUBY-ON-RAILS] 어떻게 레일에 date_select 또는 select_date에서 날짜를 얻으려면? (0) | 2020.02.19 |
[RUBY-ON-RAILS] 말대꾸 :: 구문 에러 : 수입에 파일이 없거나 읽을 수 : 부트 스트랩 - 스프로킷 (0) | 2020.02.19 |