2010-03-26 27 views
9

Tôi đang làm việc trên một ứng dụng web khá đơn giản (các từ cuối cùng nổi tiếng) và đang làm việc với Rails 2.3.5 + MongoMapper 0.7.2 và sử dụng các tài liệu nhúng. Tôi có hai câu hỏi để hỏi:Rails + MongoMapper + EmbeddedDocument form help

Trước tiên, có bất kỳ ứng dụng mẫu nào ngoài đó bằng Rails + MongoMapper + EmbeddedDocument không? Tốt hơn trên GitHub hoặc một số trang web tương tự khác để tôi có thể xem xét nguồn và xem nơi tôi phải đứng đầu? Nếu không ...

... cách tốt nhất để tiếp cận tác vụ này là gì? Làm thế nào tôi sẽ đi về việc tạo ra một hình thức để xử lý một tài liệu nhúng.

Điều tôi đang cố gắng làm là thêm địa chỉ cho người dùng. Tôi có thể quăng lên hai mô hình trong câu hỏi nếu bạn muốn.

Cảm ơn sự giúp đỡ!

Trả lời

10

Đây là phương pháp cơ bản mà tôi đã thực hiện trong một trong các ứng dụng của mình. Vấn đề có nhiều câu trả lời - vấn đề là một tài liệu, câu trả lời là một tài liệu được nhúng. Bạn có thể sử dụng liên kết "thêm câu trả lời" để tạo trường câu trả lời khác và liên kết "xóa" để xóa một câu trả lời.

_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 

tôi cắt ra một vài bit nhỏ của việc thực hiện , nhưng điều đó sẽ hiệu quả.

+1

Cảm ơn sự giúp đỡ, điều đó cho tôi một số ý tưởng. Tôi tự hỏi bộ điều khiển của bạn trông như thế nào. MongoMapper có xử lý tất cả ánh xạ để bạn làm điều gì đó khác không? Cảm ơn! –

+0

Không - bộ điều khiển giàn giáo điển hình, không có mã đặc biệt trong các mô hình và vanilla MongoMapper 0.7.0. – PreciousBodilyFluids

+0

Cảm ơn bạn rất nhiều, tôi sẽ cố gắng tối nay. –

1

Thậm chí dễ dàng hơn bây giờ - bản cập nhật cho Rails 4.1.1, ruby ​​2.1.1p76:

Models:

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

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

Bộ điều khiển:

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>