2017-11-25 2 views
0

Ich bin ein Anfänger in RoR. Ich muss einen Poll-Generator entwickeln, also habe ich mit dem Befehl 'rails generate scaffold' eine App mit drei Modellen 'Formulaire' 'Question' und 'Reponse' erstellt. Ich bin nicht in der Lage, meine Formulare zu erstellen, um meine Umfrage in derselben Ansicht zu generieren, ich dachte, ich könnte meine Fragen/_Form in meiner Formel/_Form rendern, aber es funktioniert nicht. Ich habe versucht, ein form_for (Frage) in meinem form_for (@formulaire) in meiner Ansicht formelires/_formConnect Ansichten und Modelle/Ruby-RoR

So wie kann ich meine drei Modelle verbinden und meine drei Entitäten in einer gleichen Ansicht erstellen?

Danke

+0

Bitte erläutern Sie _ _ es funktioniert nicht _ _. Was hast du versucht? Welches Problem hast du? Gab es eine Fehlermeldung? Bitte zeigen Sie Ihren Code. – spickermann

+0

Das Problem ist, dass ich Formulare mit Fragen und Antworten erstellen muss. Ich bin in der Lage, Formulare in meiner Datenbank und Fragen zu erstellen, aber ich weiß nicht, wie Sie jedes Formular mit mehreren Fragen verbinden. Zum Beispiel habe ich Benutzer mit Formularen in meinem Formulaire-Controller mit "@formulaire = current_user.formulaires.new" in meinem configurations Controller in meiner neuen Methode verbunden. – user9007028

Antwort

0

In Ruby on Rails, verfügbar die Klassenvariablen zu der Ansicht (@something), werden in der Controller Aktion gesetzt. Also sagen Sie, dass Sie einen UsersController haben, der eine index Aktion hat. Dies würde oft @users = User.all definieren.

In der Ansicht, app/views/users/index.html.erb, können Sie dann @users verwalten, oder zeigen Sie diese in einer Tabelle oder was auch immer.

Wie Ihre Frage klingt, ist, dass das Gerüst für jeden einen Controller erstellt hat, aber Sie möchten sie in der gleichen Ansicht verwalten? Hier müssen Sie den Controller bearbeiten, um diese Modelle ebenfalls zu finden, indem Sie das Modell initialisieren. @question = Question.new und form_for(@question).

Ich würde empfehlen, dass Sie lesen http://edgeguides.rubyonrails.org/getting_started.html Kapitel 5 und 6, um ein grundlegendes Verständnis der Modelle, Formulare und Controller zu bekommen.

EDIT:

Basierend auf Ihre Antwort unten, ich glaube, Sie .questions.build verwenden sollten und nicht .new. Als .questions werde ich einen ActiveRecord::Collection zurückgeben, soweit ich mich erinnere, und Sie werden new auf diesem aufrufen. Das geeignete für den Aufbau eines neuen Datensatzes, durch eine has_many-Beziehung, ist .build it. Siehe folgenden Link: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many

+0

Danke für deine Hilfe, es hat mir geholfen, aber ich habe noch keine Lösung gefunden – user9007028

+0

Danke Frederik! – user9007028

0

In diesem Fall könnten Sie etwas tun, wie ein Master-Modell erstellen Formulaire genannt, dann eine Frage Modell und ein Antwort-Modell und einen Kommentar Modell ...

A Formulaire hätte viele Fragen (has_many) und eine Frage hätten eine oder mehrere Antworten (has_one oder has_many).

Mit Rails müssen Controller, Ansichten und Modelle zusammenarbeiten. Das heißt, wenn Sie eine Frage hinzufügen (oder bearbeiten) wollen, ist die einfache Sache etwas wie apps/views/questions/_edit.html.erb.

Sie könnten auch verschachtelte Parameter eingeben.

def formulaire_params 
    params.require(:formulaire).permit(
     : name, 
     : subject, 
     : instructions, 
     { questions: [:id, :description, :_destroy] }, 
     ... 
    ) 
end 

Um ein „formulaire“ anzuzeigen, durch die mas_many und has_one Beziehungen Sie (sowie für eine angemessene Scoping und Berechtigungen) hinzugefügt haben, sollten Sie leicht in der Lage sein, etwas zu tun, wie

<% @formulaire.questions.each do |question| %> 
    <span class=""><%= question.description %></span> 
    <% question.answers.each do |answer| %> 
    <span class=""><%= answer.owner.name %></span> 
    <span class=""><%= answer.description %></span> 
    <% end %> 
... 
<% end %> 
+0

Vielen Dank Michel für Ihre Antwort. Ich tat, was Sie erklärten, aber ich habe einen Fehler: NoMethodError in Fragen # neu in meiner app/Ansichten/Fragen/_form.html.erb Klasse undefined Methode 'Fragen 'für Null: NilClass – user9007028

+0

Können Sie Ihren Controller für formelires buchen und Fragen? –

0

Mein 'formulaire Controller'

def new 
@formulaire = current_user.formulaires.new 
end 

Meine Ansicht formulaire/_form

<%= form_for (@formulaire), html: {:multipart => true} do |f| %> 

Meine Frage Controller

def new 
@question = current_user.questions.new 
end 

Meine Ansicht Fragen/_form

<%= form_for(@question) do |f| %> 

Ich habe versucht, mit ‚form_for ([@ formulaire, @ formulaire.questions.new]) tun | f | %> Aber ich hatte einen NoMethodError in Fragen # neu

Ty.

+0

Ich habe meine Antwort auf die neuen Informationen aktualisiert. Das sollte funktionieren. –