9

私は非常に単純な Web アプリケーション (有名な最後の言葉) に取り組んでおり、Rails 2.3.5 + MongoMapper 0.7.2 で作業しており、埋め込みドキュメントを使用しています。2 つの質問があります。

まず、Rails + MongoMapper + EmbeddedDocument を使用したサンプル アプリケーションはありますか? ソースを見て、どこに向かうべきかを確認できるように、できればGitHubまたは他の同様のサイトで?そうでない場合...

... このタスクに取り組むための最良の方法は何ですか? 埋め込みドキュメントを処理するフォームを作成するにはどうすればよいですか。

私がやろうとしているのは、ユーザーにアドレスを追加することです。ご希望であれば、問題の 2 つのモデルを差し上げます。

助けてくれてありがとう!

4

2 に答える 2

10

これが私のアプリの1つで採用した基本的なアプローチです。問題には多くの答えがあります-問題は文書であり、答えは埋め込まれた文書です。「回答の追加」リンクを使用して別の回答フィールドを生成し、「削除」リンクを使用して1つを削除できます。

_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>

problem_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

実装のいくつかのマイナービットを切り取りましたが、それはうまくいくはずです。

于 2010-03-26T20:00:16.727 に答える
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>
于 2014-05-25T09:05:00.637 に答える