Ich habe folgende Modelle:has_many durch den Zugang Join-Tabelle Attribut in Form
class RandomExam < ActiveRecord::Base
has_many :random_exam_sections
has_many :sections, :through => :random_exam_sections
end
class Section < ActiveRecord::Base
has_many :random_exam_sections
has_many :random_exams, :through => :random_exam_sections
class RandomExamSection < ActiveRecord::Base
belongs_to :random_exam
belongs_to :section
end
Die Idee ist, bestimmte Konfigurationen haben zufällige Prüfungen zu erstellen, so dass diese Tabellen helfen, um auszuwählen, welche Abschnitte Sie brauchen und dann auch wählen Sie die Anzahl der Fragen pro Abschnitt, hier sind die Attribute jeder Tabelle:
RandomExam: (String), created_at (Datumzeit), updated_at (Datumzeit)
Sektion: (String), created_at (Datumzeit), aktualisiert_at (datetime)
RandomExamSection: random_exam_id (integer), SECTION_ID (integer), questions_number (integer)
Wie Sie die Anzahl der Fragen pro Abschnitt Attribut sehen können, ist in dem RandomExamSections Tisch und ich möchte es in einem Formular zuzugreifen, angezeigt wird, hier von der RandomExam Controller ist meine Form:
<%= form_for (@random_exam) do |f| %>
<div class="row">
<div class="input-field col s12">
<%= f.label :name, 'Name' %>
<%= f.text_field :name, placeholder: 'Enter the name of the configuration' %>
</div>
</div>
<% @sections.each do |section| %>
<div class="row <%= dom_id(section) %>">
<div class="col s4">
<%= check_box_tag 'random_exam[section_ids][]', section.id,
@random_exam.section_ids.include?(section.id), id: dom_id(section), class: "section-checkbox #{dom_id(section)}" %>
<%= label_tag dom_id(section), (raw sanitize section.name, tags: %w(h2 p strong em a br b i small u ul ol li blockquote), attributes: %w(id class href)),
class: "name #{dom_id(section)}" %>
</div class="col s4">
<div>
<%= text_field_tag "random_exam[random_questions_numbers][#{section.id}][]", nil,
:placeholder => 'Enter the number of questions' %>
</div>
</div>
<% end %>
<div class="form-group">
<%= f.submit class: "btn waves-effect waves-light green" %>
</div>
<% end %>
Mein Controller:
def create
@random_exam = RandomExam.new(random_exam_params)
if @random_exam.save
assign_random_questions_number
flash[:success] = 'Random configuration created successfully'
redirect_to @random_exam
else
flash.now[:danger] = @random_exam.errors.full_messages.to_sentence
render 'new'
end
def assign_random_questions_number
if params[:random_exam][:'random_questions_numbers'] == nil
return
end
params[:random_exam][:'section_ids'].each do |key, value|
record = RandomExamSection.search_ids(@random_exam.id, key)
record.each do |random_exam_section_record|
number_of_questions = params[:random_exam][:'random_questions_numbers'][key].first.to_i
random_exam_section_record.update(questions_number: number_of_questions)
end
end
Ende
Ich erhalte eine Typeerror: TypeError: nil is not a symbol nor a string
, wenn ich den Rekord in der
Dieser Fehler assign_random_questions_number
Methode aktualisieren erscheint, auch wenn ich dies auf der
random = RandomExamSection.first
random.update(questions_number: 10)
Oder wenn ich laufe:
BEARBEITEN
Ich löschte die Zuordnung i n RandomExamSection und neu erstellen es innerhalb 'assign_random_questions_number' mit der Frage Nummer
Vielen Dank.
Hallo und willkommen zu stapeln Überlauf. Also - ich bemerke, dass es für diese Anzahl von Abschnitten überhaupt kein Formularfeld gibt. Was hast du versucht, in deine Form zu bringen, um diese Arbeit zu machen und was, wenn überhaupt, Fehler hast du gesehen, als du das versucht hast? –
@TarynEast Nun, ich habe mehrere Stack-Overflow-Antworten versucht, das Problem ist, dass sie verschachtelte Felder verwenden, nicht etwas, das wir in unserer Implementierung verwenden. In der Tat haben wir keine Ahnung, wie das Feld benannt werden sollte, denn wenn wir es speichern, erscheint es nicht. – Dazt
so ...Zeige uns, was du probiert hast (bearbeite deine Frage und lege sie dort hin), und wir können dir helfen, es zu beheben, damit es erscheint :) AFAICT es ist nur ein anderes Feld ... also füge ein weiteres Feld mit dem Namen was du willst. –