2016-11-24 2 views
0

In meiner Anwendung habe ich ein Formular mit Radio-Buttons:RoR: Wie man Tabelle von Radioknöpfen auffüllt?

<%= form_for @homework.homework_students.homework_ratings do |f| %> 
    <label> 
    <%= f.radio_button :fb_value, '1', :fb_type, 'Difficulty' %> 
    </label> 
    1 
    <label> 
    <%= f.radio_button :fb_value, '2', :fb_type, 'Difficulty' %> 
    </label> 
    2 
    <label> 
    <%= f.radio_button :fb_value, '3', :fb_type, 'Difficulty' %> 
    3 
    </label> 
<%= f.button :submit %> 
<% end %> 

Ziel ist es zwei Spalten (so genannte „Wert“ und „Typ“) für jede Hausaufgabe in einer Tabelle zu füllen (nicht sicher, ob Syntax korrekt ist oben) "homework_ratings" genannt wird, die mit einer Tabelle mit dem Namen "homework_students" zugeordnet ist:

homework_ratings.rb

belongs_to :homework_student, :class_name => 'HomeworkStudent', :foreign_key => :homework_student_id 

homework_students.rb

homework_students hat viele HomeWorks-:

homework.rb

has_many :homework_students, :class_name => 'HomeworkStudent', dependent: :destroy 

homework_ratings Tabelle:

id     :integer   not null, primary key 
# homework_student_id :integer 
# type    :integer 
# value    :string(255) 
# created_at   :datetime   not null 
# updated_at   :datetime   not null 

homeworks_controller.rb

def show 
     @homework_ratings = HomeworkRating.all 
... 
end 

In einem n Ich versuche, einen Tisch von Hausaufgaben zu bevölkern, der keine direkte Verbindung mit Hausaufgaben hat, aber indirekt wie oben durch Hausaufgabenstudenten verbunden ist.

Ich bekomme den Fehler "undefined Methode homework_ratings" beim Versuch, Seite zu laden.

Irgendwelche Gedanken, wie man das am besten angeht?

Danke, können weitere Informationen zur Verfügung stellen ...

+1

Dies ist nicht die Antwort, aber ich würde etwas anderes als 'value' und' type' für Feldnamen verwenden, da diese unweigerlich mit eingebauten Schienenmethoden kollidieren werden. – court3nay

Antwort

1

vereinfachen. Du versuchst eine Bewertung für ein Stück Hausaufgaben aufzunehmen, oder? Sie erstellen also einen dedizierten Bewertungs-Controller und erstellen einfach eine Bewertung. Versuchen Sie immer, aus etwas, das Sie erstellen, eine Ressource zu machen. Sie sollten viele Ressourcen/Controller in Ihrer App haben.

<%= form_for @homework_rating do |f| %> 
    <%= f.hidden_field :homework_student_id %> 

in der Steuerung:

def new 
    @homework_student = HomeworkStudent.find params[:homework_student_id] 
    @homework_rating = @homework.ratings.new 
end 

Sie wahrscheinlich auch als has_many :through

bearbeiten aussehen wollen: Sie können nicht zwei Werte mit einem Optionsfeld gesetzt. Sie können jedoch einen Schriftsteller Methode in der Modellbewertungen erstellen

def set_values=(val) 
    self.type = "foo" 
    self.value = "bar" 
end 

Sie können dann tun alle Arten von Ruby auf dem val, wie wenn oder Fall. Sie müssen eine Möglichkeit finden, das zwischen den Optionsfeldern und der Modellaktion zu kommunizieren.

+0

Danke, ich habe Ihren Vorschlag gemacht, aber bekomme diesen Fehler: "Das erste Argument in der Form kann nicht null oder leer sein". Ich lade die Show-Ansicht in Hausaufgaben. – Co2

+0

Ich versuche etwas basierend auf Ihrer Anleitung. Ich denke, meine Syntax ist falsch in Form für Radio-Button, obwohl falsche Anzahl von Argumenten (4 für 2..3) - das ist auf der ersten Radio-Button ... – Co2

+0

Ja, weil Sie die Instanzvariable @homework_rating in jeder Aktion einrichten müssen, die Sie das Formular rendern, in Ihrem Fall ist es Show nicht neu. – court3nay

Verwandte Themen