2010-03-26 26 views
9

Raylar 2.3.5 + MongoMapper 0.7.2 ile çalışan ve gömülü belgeleri kullanıyorum. Raylar + MongoMapper + EmbeddedDocument kullanarak orada herhangi bir örnek uygulamalar vardır,Raylar + MongoMapper + EmbeddedDocument formu yardım

İlk: Ben sormak iki sorum var? Tercihen GitHub ya da benzer başka bir sitede, kaynağa bakıp nereye gideceğimi görebileceğim bir yer bulabileyim?

... Değilse ... Bu görevi yaklaşım en iyi yolu nedir? Gömülü bir belgeyi işlemek için bir form oluşturmaya nasıl giderim. Ben çalışırken yapmak ne

kullanıcılara adresleri eklemek olduğunu. Eğer istersen söz konusu iki modeli atabilirim.

Yardımın için teşekkürler!

cevap

10

İşte benim uygulamalardan biri aldı temel yaklaşım bu. Problemin birçok cevabı var - sorun bir belgedir, cevap gömülü bir belgedir. Başka bir yanıt alanı oluşturmak için "yanıt ekle" bağlantısını ve silmek için "kaldır" bağlantısını kullanabilirsiniz.

_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 ben uygulanması birkaç küçük bit kesip

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 

ama bu işe yaramalı. Daha kolay artık

+1

Yardımın için teşekkürler, bu bana bazı fikirler veriyor. Denetleyicinin neye benzediğini merak ediyorum. MongoMapper, başka bir şey yapmak için tüm haritalamayı ele alıyor mu? Teşekkürler! –

+0

Nope - tipik iskele denetleyicisi, modellerde özel kod ve vanilla MongoMapper 0.7.0. – PreciousBodilyFluids

+0

Çok teşekkür ederim, bu akşam deneyeceğim. –

1

- Raylar 4.1.1 güncelleştirmesi, yakut 2.1.1p76:

Modeller:

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

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

Denetleyici:

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>