counter_캐치가 편할 줄은 몰랐어요.
10905 단어 Rails
개시하다
rails counter로캐치 있는 거 알아요.
지금까지 예를 들어볼게요.rails g model user name:string
rails g model star user:references
이렇게
사용자 스타의 수를 알고 싶을 때.stars_count = Star.where(user_id: params[:id]).count
이렇게
그런데 카운터.캐치를 사용하면 스타가 만들어졌을 때 자동user란의 스타.count에 스타를 넣은 수량.
사용법
models/user.달성
user.rbclass User < ApplicationRecord
has_many :stars
end
models/star.달성
star.rbclass Star < ApplicationRecord
belongs_to :user, :counter_cache => true
end
.
이만 마치겠습니다.
겸사겸사 말씀드리지만, 사전에 user에서 stars를count라는 열을 만들어야 합니다.
또 스타즈.count 대신 다른 열 이름을 사용하려면 선택하십시오:counter_cache => true
열다counter_cache: :sample_count
그러면 오케이.
시용하다 rails g model user name stars_count:integer
rails g model star
rails db:migrate
rails c
user = User.create(name: "counter")
100.times {user.stars.create}
省略
"2019-02-07 12:03:41.796608"], ["updated_at", "2019-02-07 12:03:41.796608"], ["user_id", 2]]
User Update All (0.2ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(11.3ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.812850"], ["updated_at", "2019-02-07 12:03:41.812850"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(12.1ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.831223"], ["updated_at", "2019-02-07 12:03:41.831223"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(11.3ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.847880"], ["updated_at", "2019-02-07 12:03:41.847880"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(13.2ms) commit transaction
=> 100
user.stars_count
=> 100
이렇게 잘했어.
Reference
이 문제에 관하여(counter_캐치가 편할 줄은 몰랐어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sibakenY/items/cce7def30921c7566be2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
rails g model user name:string
rails g model star user:references
stars_count = Star.where(user_id: params[:id]).count
models/user.달성
user.rb
class User < ApplicationRecord
has_many :stars
end
models/star.달성star.rb
class Star < ApplicationRecord
belongs_to :user, :counter_cache => true
end
.이만 마치겠습니다.
겸사겸사 말씀드리지만, 사전에 user에서 stars를count라는 열을 만들어야 합니다.
또 스타즈.count 대신 다른 열 이름을 사용하려면 선택하십시오
:counter_cache => true
열다counter_cache: :sample_count
그러면 오케이.시용하다 rails g model user name stars_count:integer
rails g model star
rails db:migrate
rails c
user = User.create(name: "counter")
100.times {user.stars.create}
省略
"2019-02-07 12:03:41.796608"], ["updated_at", "2019-02-07 12:03:41.796608"], ["user_id", 2]]
User Update All (0.2ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(11.3ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.812850"], ["updated_at", "2019-02-07 12:03:41.812850"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(12.1ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.831223"], ["updated_at", "2019-02-07 12:03:41.831223"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(11.3ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.847880"], ["updated_at", "2019-02-07 12:03:41.847880"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(13.2ms) commit transaction
=> 100
user.stars_count
=> 100
이렇게 잘했어.
Reference
이 문제에 관하여(counter_캐치가 편할 줄은 몰랐어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sibakenY/items/cce7def30921c7566be2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
rails g model user name stars_count:integer
rails g model star
rails db:migrate
rails c
user = User.create(name: "counter")
100.times {user.stars.create}
省略
"2019-02-07 12:03:41.796608"], ["updated_at", "2019-02-07 12:03:41.796608"], ["user_id", 2]]
User Update All (0.2ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(11.3ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.812850"], ["updated_at", "2019-02-07 12:03:41.812850"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(12.1ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.831223"], ["updated_at", "2019-02-07 12:03:41.831223"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(11.3ms) commit transaction
(0.1ms) begin transaction
Star Create (1.2ms) INSERT INTO "stars" ("created_at", "updated_at", "user_id") VALUES (?, ?, ?) [["created_at", "2019-02-07 12:03:41.847880"], ["updated_at", "2019-02-07 12:03:41.847880"], ["user_id", 2]]
User Update All (0.1ms) UPDATE "users" SET "stars_count" = COALESCE("stars_count", 0) + 1 WHERE "users"."id" = ? [["id", 2]]
(13.2ms) commit transaction
=> 100
user.stars_count
=> 100
Reference
이 문제에 관하여(counter_캐치가 편할 줄은 몰랐어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sibakenY/items/cce7def30921c7566be2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)