2009-05-15 7 views
3

Ich habe 2 Tabellen: Formular, Fragen. Die Idee ist sehr einfach, jede Form hat viele Fragen. Die Tische wurden gedecktRuby on Rails, ActiveScaffold und Verwandte in der Datenbank

form = | ID | Titel |

Fragen = | ID | Titel | Eingabe | form_id |

und wie Sie erraten können, ist die form_id der Schlüssel der Formular-ID.

class FormsController < ApplicationController 
active_scaffold :form 
end 

class QuestionsController < ApplicationController 
active_scaffold :question 
end 

class Question < ActiveRecord::Base 
has_one :form 
end 

class Form < ActiveRecord::Base 
has_many :question 
end 

und ich möchte eine ActiveScaffold (Frage) mit select mit avalable Formen machen. Jetzt kann ich nur die ID des Formulars eingeben, aber nicht über das Dropdown-Menü. Wie sollte ich Rails oder ActiveCaffold konfigurieren?

Danke. Entschuldigung für mein Englisch :)

Antwort

4

Sie müssen einige Konfiguration zu Ihrem Controller hinzufügen.

class QuestionsController < ApplicationController 
    active_scaffold :question do |config| 
    config.columns = [:id, :title, :input, :form_id] 
    config.columns[:form_id].ui_type = :select 
    end 
end 
0

Ich bin nicht sicher über active_scaffold aber es gibt ein paar Fehler in Ihrer Beziehung Aussagen in Form und Frage-Modell. Ich denke, das ist, was Sie wollen:

class Form < ActiveRecord::Base 
has_many :questions 
end 

class Question < ActiveRecord::Base 
belongs_to :form 
end 

Hoffe, das hilft.

4

Wenn Sie eine Dropdown-Liste mit ActiveScaffold ohne Kopfschmerzen Arbeit zu bekommen, müssen Sie diese einfache Regel: Dropdown Wille funktioniert nur, wenn Sie zu Verein in belongs_to erklärt beziehen. Machen Sie eine Mischung aus früheren Antworten können Sie:

in Ihren Modellen folgen den Schienen Weg. Respektiere Pluralisierungen und Flexionen. schreiben sie dann als vorschlagen allesklar:

class Form < ActiveRecord::Base 
has_many :questions 
end 

class Question < ActiveRecord::Base 
belongs_to :form 
end 

Es ist sehr wichtig singuläre Namen in Assoziationen mit „belongs_to“ zu verwenden, in diesem Fall: Form

In Ihrem Controller die Antwort von Sarah Mei verwenden, aber ändern es ein wenig, den Verein Namen, die Sie in belongs_to erklären haben, dann werden Sie so etwas wie dieses

class QuestionsController < ApplicationController 
    active_scaffold :question do |config| 
    config.columns = [:id, :title, :input, :form] 
    config.columns[:form].ui_type = :select 
    end 
end 

haben Wenn u Modelle mit mehr als einem Feld verwenden, denken Sie daran „def to_label“ zu verwenden, da ActiveScaffold kann nicht gues Welches Feld möchtest du zeigen?

Greets