J'ai donc deux modèles - Status
et Post
. Un statut peut être: Empty
, Half
ou Full
.Association correcte pour un statut d'un autre modèle
Chaque post
ne peut avoir 1 état à un moment donné, ce poste ne peut être soit empty
ou half
, etc. Il doit être l'un des 3.
Cependant, un statut peut avoir de nombreux postes . Donc le statut Empty
peut avoir 20 publications.
Quelle est la meilleure façon d'aborder cela, du point de vue des associations? Je pensais initialement qu'un Post
a un Status
. Mais le problème avec cela, c'est que le Status
aurait belong_to
un Post
.
Donc maintenant, je l'ai comme:
Status has_many :posts
Post belongs_to :status, counter_cache: true
Mais chaque fois que je veux attribuer un statut à un poste, je dois le faire Backways et il se sent bizarre.
dire que je dois faire quelque chose comme:
> g = Post.second
Post Load (0.7ms) SELECT "posts".* FROM "posts" ORDER BY "posts"."id" ASC LIMIT 1 OFFSET 1
=> #<Post id: 19, title: "10PP gives you 1 on 1", photo: "1-on-1-Icon.jpg", body: "10PP gives you the real one on one attention you c...", created_at: "2014-08-30 10:48:18", updated_at: "2014-08-30 10:48:18", user_id: 1, ancestry: nil, file: nil, status_id: nil>
2.1.1p76 :010 > half = Status.second
Status Load (0.5ms) SELECT "statuses".* FROM "statuses" ORDER BY "statuses"."id" ASC LIMIT 1 OFFSET 1
=> #<Status id: 2, name: "half", created_at: "2014-08-28 08:04:42", updated_at: "2014-08-28 08:04:42", posts_count: nil>
2.1.1p76 :011 > half.posts << g
(0.1ms) BEGIN
SQL (0.3ms) UPDATE "posts" SET "status_id" = $1, "updated_at" = $2 WHERE "posts"."id" = 19 [["status_id", 2], ["updated_at", "2014-08-30 11:37:16.121245"]]
SQL (0.4ms) UPDATE "statuses" SET "posts_count" = COALESCE("posts_count", 0) + 1 WHERE "statuses"."id" = 2
(0.9ms) COMMIT
Post Load (0.8ms) SELECT "posts".* FROM "posts" WHERE "posts"."status_id" = $1 [["status_id", 2]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Post id: 19, title: "10PP gives you 1 on 1", photo: "1-on-1-Icon.jpg", body: "10PP gives you the real one on one attention you c...", created_at: "2014-08-30 10:48:18", updated_at: "2014-08-30 11:37:16", user_id: 1, ancestry: nil, file: nil, status_id: 2>]>
Je préférerais être l'autre sens, à savoir l'attribution d'un statut au poste. Je pense que ce n'est pas la meilleure façon de le faire, mais je ne sais pas comment faire pour y remédier.
En outre, comment devrais-je aborder le PostsController#Create
?
En ce moment, je viens de:
@post = current_user.posts.new(post_params)
qui n'attribue pas l'objet correct d'état au poste actuel.
Ahhh ... Yeh grande idée. Y a-t-il un avantage de performance? – marcamillion
bien sûr, il est, parce que c'est dans le même enregistrement, pas de relations, juste un champ 'status' (même pas string juste int) – IS04
Ahh ok. Merci! – marcamillion