2010-03-26 78 views
9

我正在研究一個非常簡單的Web應用程序(着名的遺言),並且正在使用Rails 2.3.5 + MongoMapper 0.7.2並使用嵌入式文檔。我有兩個問題要問:Rails + MongoMapper + EmbeddedDocument表單幫助

首先,有沒有使用Rails + MongoMapper + EmbeddedDocument的示例應用程序?最好在GitHub或其他類似的網站上,以便我可以查看源代碼並查看我應該在哪裏領導?如果沒有...

...什麼是最好的方式來處理這個任務?我將如何去創建一個表單來處理嵌入式文檔。

我正在嘗試做的是向用戶添加地址。如果你願意,我可以把這兩個模型折騰起來。

感謝您的幫助!

回答

10

下面是我在我的一個應用程序中使用的基本方法。問題有很多答案 - 問題是文件,答案是嵌入文件。您可以使用「添加答案」鏈接生成另一個答案字段,並使用「刪除」鏈接刪除一個。

_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 

我剪下實施的幾個小位,但這應該起作用。

+1

感謝您的幫助,這給了我一些想法。我想知道你的控制器可能是什麼樣子。 MongoMapper是否處理所有的映射,你做了別的什麼? 謝謝! – 2010-03-26 20:05:03

+0

沒有 - 典型的腳手架控制器,在模型中沒有特別的代碼,和vanilla MongoMapper 0.7.0。 – PreciousBodilyFluids 2010-03-26 20:09:18

+0

非常感謝,今晚我會試試這個。 – 2010-03-26 20:12:16

1

即使現在更容易 - 更新爲Rails 4.1.1,紅寶石2.1.1p76:

型號:

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

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

控制器:

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>