0

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.

Répondre

1

vous pouvez essayer autrement avec l'aide enumhttp://edgeguides.rubyonrails.org/4_1_release_notes.html#active-record-enums

class Post < ActiveRecord::Base 
    enum status: [ :empty, :half, :full ] 
end 

Post.full 
Post.first.empty? 
+0

Ahhh ... Yeh grande idée. Y a-t-il un avantage de performance? – marcamillion

+0

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

+0

Ahh ok. Merci! – marcamillion

Questions connexes