【问题标题】:Rails + MongoMapper + EmbeddedDocument form helpRails + MongoMapper + EmbeddedDocument 表单帮助
【发布时间】:2010-03-26 19:11:58
【问题描述】:

我正在开发一个非常简单的 Web 应用程序(著名的遗言),并且正在使用 Rails 2.3.5 + MongoMapper 0.7.2 并使用嵌入式文档。我有两个问题要问:

首先,有没有使用 Rails + MongoMapper + EmbeddedDocument 的示例应用程序?最好在 GitHub 或其他类似网站上,以便我可以查看源代码并了解我应该去哪里?如果不是...

...完成这项任务的最佳方法是什么?我将如何创建一个表单来处理嵌入式文档。

我正在尝试为用户添加地址。如果你愿意,我可以折腾这两个模型。

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails forms mongodb mongomapper


    【解决方案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>
    

    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
    

    我删掉了一些小的实现,但应该可以。

    【讨论】:

    • 感谢您的帮助,这给了我一些想法。我想知道你的控制器可能是什么样子。 MongoMapper 是否处理所有映射到您是否做了其他事情?谢谢!
    • 不 - 典型的脚手架控制器,模型中没有特殊代码,以及 vanilla MongoMapper 0.7.0。
    • 非常感谢,今晚我试试看。
    • 只是一个注释。如果“答案”具有多个属性,则此代码示例似乎不起作用。
    • 对我来说效果很好,具有多个属性。诚然,我还没有尝试过 AJAX-y 部分,但基本形式的效果很好。
    【解决方案2】:

    现在更简单了——更新 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 2011-09-16
      相关资源
      最近更新 更多