Ich habe ein Rails 3.0-Projekt, Mongo mit MongoMapper verwenden. Ich habe ein Modell mit grundlegenden Informationen über einen Tierladen, der viele Haustiere hat. Ein Haustier ist ein separates Modell.Hinzufügen einer Verarbeitung benutzerdefinierte Formularfeld in Schienen 3.0 mit Mongomapper
Ich habe ein Formular, mit dem ich neue Petstores erstellen kann, aber wie füge ich ein Feld hinzu, um gleichzeitig ein Pet zu erstellen, während ich den neuen Store erstelle? Im Moment habe ich eine gehackte Lösung, die bewirkt, was ich will, aber ich habe wahrscheinlich einen Rails-Weg, um das zu tun, oder? Wie kann ich es richtig machen, so dass ich Validierungen auf den Formularfeldern und dergleichen verwenden kann?
Meine aktuelle Lösung beinhaltet das manuelle hacken in einem Formularfeld für das Haustier (in der Formularvorlage wurde ein Tag mit name = "petstore [pet]" hinzugefügt. Dieses Formular wird von der create-Methode von petstore_controller verarbeitet und ich habe Code zum Erstellen hinzugefügt ein Tier aus dem Formularfeld
Modelle:
class Petstore
include MongoMapper::Document
many :pets, :dependent => :destroy
key :name, String
key :address, String
end
class Pet
include MongoMapper::Document
belongs_to :petstore
key :petstore_id, ObjectID, :required=>true
key :type, String, :required=>true
key :name, String
end
_form.html.erb
<%=form_for @petstore do |f| %>
<li>
<%= f.label :name %>
<%= f.text_field :name, :placeholder =>"The name" %>
</li>
<li>
<%= f.label :address %>
<%= f.text_field :address, :placeholder =>'The address' %>
</li>
<li>
<label for="petstore_pet">Type of pet</label>
<input type="text" id="petstore_pet" name="petstore[pet]">
<li>
<%= f.submit "Submit" %>
</li>
<% end %>
petstores_controller.rb
def create
pet = @petstore.pets.build :type => params[:petstore][:pet]
pet.save if pet
respond_to do |format|
...
end
end
ähnliche Themen/Fragen:
(Ich bin mir nicht ganz sicher, wie diese Lösung auf meine Frage zur Karte.)
(Akzeptierte Antwort verweist auf einen Google Group-Thread, der ein wenig über meinem Kopf ist ...)