2017-03-26 1 views
0

modèles/vidéoRails 5 - Simple_form et association has_one

class Video < ApplicationRecord 
    has_one :category, through: :video_category 
    has_one :video_category 
end 

modèles/catégorie

class Category < ApplicationRecord 
    has_many :video_categories 
    has_many :videos, through: :video_categories 
end 

Une vidéo ne peut avoir qu'une seule catégorie, mais une catégorie a plusieurs vidéos.

Je laisse les utilisateurs publier des liens vidéo et les laisser choisir la meilleure catégorie pour chaque vidéo. J'ai créé certaines catégories dans admin et ils ne peuvent utiliser que celles que j'ai créées.

vues/vidéos/nouvelles

<%= simple_form_for @new_video do |f| %> 
    <%= f.input :title %> 
    <%= f.input :description, as: :text %> 
    <%= f.input :category, 
       as: :select, 
       label: "Category" %> 
    <%= f.button :submit, "Submit", class:"btn btn-danger post-button-form" %> 
<% end %> 

Au lieu d'avoir les catégories, j'ai juste le choix entre « Oui » ou « Non » Je ne peux pas utiliser f.associations au lieu de f. entrée car j'ai une erreur en disant que je ne peux pas utiliser les associations avec une relation "has_one".

Que puis-je faire? Je suis vraiment coincé :(

Merci

Répondre

1

Puisque vous utilisez has_many_through ici pour cette simple association (pour autant que je vois maintenant), il est un peu plus compliqué. Vous pouvez simplement utiliser 1 à la normale many sans ce troisième modèle (VideoCategory) Mais dans votre cas.

  1. VideoContrller:

params.require(:video).permit(:name, :description, video_categories_attributes: [:id, :foo, :bar])

  1. video.rb:

accepts_nested_attributes_for :video_category

  1. tables de base de données doit contenir:
videos: 
video_category_id:integer 
categories: 
video_category_id:integer 
video_categories: 
video_id:integer 
category_id:integer 
  1. Vous pouvez maintenant définir ou créer un enregistrement VideoCategory à partir de la vidéo er. Essayer dans la console:

Video_category.create!

Video.last.video_category = 1

Mais je pense que pour votre cas, il serait plus facile d'utiliser simplement un à plusieurs assoc, sans JoinedModel.

J'espère que cela vous mettra sur les pistes.

+0

Merci pour votre réponse. Vous avez raison, une association de un à plusieurs est beaucoup mieux pour mon cas. J'ai modifié mon modèle et maintenant tout fonctionne bien. – Matt

+0

Bien, très content que ça a aidé –