2017-03-26 6 views
0

models/VideoRails 5 - Simple_form und has_one Verein

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

Modelle/Kategorie

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

Ein Video kann nur eine Kategorie, sondern eine Kategorie haben mehrere Videos.

Ich lasse die Nutzer Video-Links posten und lassen sie die beste Kategorie für jedes Video auswählen. Ich habe einige Kategorien in Admin erstellt und sie können nur diejenigen verwenden, die ich erstellt habe.

views/Videos/new

<%= 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 %> 

Statt die Kategorien mit, ich habe nur die Wahl zwischen "Ja" oder "Nein" ich nicht f.associations statt f verwenden können. Eingabe, weil ich einen Fehler habe, der besagt, dass ich keine Assoziationen mit einer "has_one" -Beziehung verwenden kann.

Was kann ich tun? Ich bin wirklich stecken :(

Danke

Antwort

1

Da Sie has_many_through hier für diese einfache Zuordnung verwenden (soweit ich sehe jetzt), es ist ein bisschen mehr als kompliziert. Man konnte einfach normale verwenden 1 viele Vereinigung ohne dieses dritte Modell (VideoCategory) aber in Ihrem Fall.

  1. VideoContrller:

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

  1. video.rb:

accepts_nested_attributes_for :video_category

  1. Datenbanktabellen enthalten:
videos: 
video_category_id:integer 
categories: 
video_category_id:integer 
video_categories: 
video_id:integer 
category_id:integer 
  1. Jetzt können Sie einen VideoCategory-Datensatz über die Videocotroll festlegen oder erstellen er. Versuchen Sie in der Konsole:

Video_category.create!

Video.last.video_category = 1

Aber ich denke, für Ihren Fall wäre es einfacher, einfach ein zu vielen Assoc zu verwenden, ohne die JoinedModel.

Hoffe, das wird Sie auf Spuren bekommen.

+0

Vielen Dank für Ihre Antwort. Du hast Recht, eine Eins-zu-viele-Verbindung ist viel besser für meinen Fall. Ich habe mein Modell modifiziert und jetzt funktioniert alles gut. – Matt

+0

Schön, sehr froh, dass es geholfen hat –