我正在开发一个非常简单的Web应用程序(着名的最后一句话),我正在使用Rails 2.3.5 + MongoMapper 0.7.2并使用嵌入式文档。我有两个问题要问:
首先,有没有使用Rails + MongoMapper + EmbeddedDocument的示例应用程序?最好是在GitHub或其他类似的网站上,这样我就可以看看来源,看看我应该去哪里?如果不是......
......接近这项任务的最佳方法是什么?我如何创建表单来处理嵌入式文档。
我尝试做的是向用户添加地址。如果你愿意的话,我可以把这两个模型折腾起来。
感谢您的帮助!
答案 0 :(得分: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 :(得分:1)
现在更容易 - 更新Rails 4.1.1,ruby 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>