2010-03-26 11 views
9

Sto lavorando a un'applicazione web piuttosto semplice (ultime parole famose) e sto lavorando con Rails 2.3.5 + MongoMapper 0.7.2 e utilizzando documenti incorporati. Ho due domande da porre:Rails + MongoMapper + EmbeddedDocument help help

Per prima cosa, ci sono applicazioni di esempio là fuori che usano Rails + MongoMapper + EmbeddedDocument? Preferibilmente su GitHub o qualche altro sito simile in modo che io possa dare un'occhiata alla fonte e vedere dove dovrei dirigermi? In caso contrario ...

... qual è il modo migliore per affrontare questo compito? Come potrei fare per creare un modulo per gestire un documento incorporato.

Quello che sto tentando di fare è aggiungere indirizzi agli utenti. Posso sballare i due modelli in questione, se lo desideri.

Grazie per l'aiuto!

risposta

10

Ecco l'approccio di base che ho seguito in una delle mie app. Il problema ha molte risposte: il problema è un documento, la risposta è un documento incorporato. Puoi utilizzare il link "aggiungi risposta" per generare un altro campo di risposta e il link "Rimuovi" per eliminarne uno.

_form.html.erb:

<% form_for @problem do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content, :size => '50x7' %> 
    </p> 

    ...etc... 

    <%= add_answer_link "(add answer)" %> 
    <div id="answers"> 
    <%= render :partial => 'answer', :collection => @problem.answers %> 
    </div> 

    <p><%= f.submit "Submit" %></p> 
<% end %> 

_answer.html.erb:

<div class="answer"> 
    <% fields_for 'problem[answers]', answer, :index => nil do |f| -%> 
    <%= f.label :content, "Answer #{answer.id}:" %> 
    <%= f.text_field :content, :size => 50 %> 
    <%= link_to_function "(remove)", "$(this).up('.answer').remove()" %> 
    <% end -%> 
</div> 

problems_helper.rb

module ProblemsHelper 
    def add_answer_link(name) 
    link_to_function name do |page| 
     page.insert_html :bottom, "answers", :partial => 'answer', :object => Answer.new 
    end 
    end 
end 

ho tagliato un paio di bit minore di attuazione ma dovrebbe funzionare

+1

Grazie per l'aiuto, che mi dia qualche idea. Mi sto chiedendo come potrebbe essere il tuo controller. MongoMapper gestisce tutto il mapping per fare qualcos'altro? Grazie! –

+0

Nope - tipico controller impalcato, nessun codice speciale nei modelli e vanilla MongoMapper 0.7.0. – PreciousBodilyFluids

+0

Grazie molte, farò un tentativo stasera. –

1

Ancora più facile ora - aggiornamento per Rails 4.1.1, rubino 2.1.1p76:

Modelli:

class Location 
include MongoMapper::EmbeddedDocument 
    key :state, String, :default => "CA" 
    key :zip, String 
    timestamps! 
end 

class House 
include MongoMapper::Document 
timestamps! 
one :location 
end 

Controller:

def new 
    @house = House.new 
end 

new.html.erb:

<%= form_for @house, url: houses_path do |house_form| %> 
<p> 
    <%= house_form.label :name %><br> 
    <%= house_form.text_field :name %> 
</p> 

<%= house_form.fields_for :location do |address_fields| %> 

    Street : <%= address_fields.text_field :street %> 
    Zip code: <%= address_fields.text_field :zip %> 
<% end %> 

<p> 
    <%= house_form.submit %> 
</p>