2 Stimmen

Rails 3 Datumsfeld ist nach dem Absenden des Formulars leer

Rails-Neuling hier.

Ich habe 2 Modelle: Ziel und Beobachtung

Das Ziel funktioniert gut. Ich habe ein Gerüst für Observation erstellt, etwa so:

rails generate scaffold Observation date:date target:references

app/models/observation.rb sagt also:

class Observation < ActiveRecord::Base
  belongs_to :target
end

Dann habe ich app/models/target.rb bearbeitet:

class Target < ActiveRecord::Base
  has_many :observations
end

Das Gerüst erstellt app/views/observations/_form.html.erb, das Folgendes enthält:

<div class="field">
  <%= f.label :target %><br />
  <%= f.text_field :target %>
</div>

Und app/controllers/observation_controller.rb, die enthält:

def create
  @observation = Observation.new(params[:observation])

Dann gehe ich zum Erstellen einer neuen Beobachtung. Ich gebe ein Datum und die ID eines Ziels in das Zielfeld ein. Wenn ich abschicke, erhalte ich diesen Fehler im Browser:

ActiveRecord::AssociationTypeMismatch in ObservationsController#create
Target(#2190392620) expected, got String(#2148287480)

Es sieht so aus, als würde das Gerüst etwas aufbauen, das funktionieren würde. Aber der Fehler macht Sinn. Es wird die ID des Ziels anstelle des Ziels selbst empfangen. Also ich bearbeitet app/controllers/observation_controller.rb zu sagen:

def create
  @target = Target.find(params[:observation][:target])
  @observation = @target.observations.create(:date => params[:observation][:date])

Jetzt wird der Beobachtungsdatensatz mit dem Verweis auf das Ziel erstellt. Aber das Datumsfeld ist leer.

Mir ist klar, dass dies vielleicht eine dumme Anfänger- oder RTFM-Frage ist, aber ich wäre wirklich dankbar für einen Hinweis in die richtige Richtung. Danke!


Hier ist der vollständige Inhalt des Formulars, nachdem es an die erhaltene Antwort angepasst wurde.

<%= form_for(@observation) do |f| %>
  <% if @observation.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@observation.errors.count, "error") %> prohibited this observation from being saved:</h2>

      <ul>
      <% @observation.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :date %><br />
    <%= f.date_select :date %>
  </div>

  <div class="field">
    <%= f.label :target %><br />
    <%= f.collection_select :target_id, Target.all, :id, :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X