在mongoid访问子集合与导轨形式编辑和创建新条目(Access subcollection in

2019-09-17 08:14发布

我使用的MongoDB在Rails3中mongoid。 我是新手到这一切。 我的模型,如下图所示。

class Californium
 include Mongoid::Document 
 field :first_name 
 field :License_type
 Field :Licese_expiry_date
embeds_one :address 
end

class Address 
 include Mongoid::Document 
 field :street 
 field :city 
 field :state 
 field :zip 
embedded_in :Californium, :inverse_of => :address 
end

我的控制器

 class CaliforniaController < ApplicationController

   def index
    @california = Californium.all
    respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @california }
    end
   end

   def show
    @californium = Californium.find(params[:id])  
     respond_to do |format|
     format.html # show.html.erb
     format.xml  { render :xml => @californium }
     end
   end

  # Here is where I have problem. I am not able to show a 
  # form with californium address details. My form view is show after the controller

   def new        
     @californium = Californium.new
     respond_to do |format|
     format.html # new.html.erb
     format.xml  { render :xml => @californium }
     end
   end

    def edit
     @californium = Californium.find(params[:id])
    end

 end  

我的表单

<%= form_for(@californium) do |f| %>

<div class="field">
<%= f.label :license_number %><br />
<%= f.text_field :license_number %>
</div>

<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :license_type %><br />
<%= f.text_field :license_type %>
</div>
<div class="field">
<%= f.label :license_status %><br />
<%= f.text_field :license_status %>
</div>
<div class="field">
<%= f.label :license_expire_date %><br />
<%= f.text_field :license_expire_date %>
</div>
<div class="field">
<%= f.label :license_issue_date %><br />
<%= f.text_field :license_issue_date %>
</div>

<div class="field">

 # Here I am not able to access :address.street and :address.city as it is an other 
 # model embedded in californium

<%= f.label :address.street %><br />
<%= f.text_field :address.street %>
</div>

<div class="field">
<%= f.label :address.city %><br />
<%= f.text_field :address.city %>
</div>

<div class="actions">
<%= f.submit %>
</div>
<% end %>

我想在那里建立在锎的所有细节可编辑的形式。 我不能够访问锎的详细地址,因为它是锎集合的一个子集合。 我能够显示锎包括地址的所有细节,但不如何创建一个可编辑的形式。

Answer 1:

尝试使用形式帮手“fields_for”为你的嵌入式模型下面的工作实例。 希望这会有所帮助。

过了好一会儿通过错别字和不一致的地方涉水,所以如果你想在未来更快的答案,请让你的问题既准确和尽可能小。

class Californium
  include Mongoid::Document
  field :name
  field :license_type
  embeds_one :address
end

class Address
  include Mongoid::Document
  field :street
  field :city
  field :state
  field :zip
  embedded_in :california, :inverse_of => :address
end

应用/视图/ edit.html.erb

<%= form_for :californium do |f| %>

    <div class="field">
      <%= f.label :name %>
      <br/>
      <%= f.text_field :name %>
    </div>
    <div class="field">
      <%= f.label :license_type %>
      <br/>
      <%= f.text_field :license_type %>
    </div>

    <%= fields_for @californium.address do |af| %>
        <div class="field">
          <%= af.label :street %>
          <br/>
          <%= af.text_field :street %>
        </div>

        <div class="field">
          <%= af.label :city %>
          <br/>
          <%= af.text_field :city %>
        </div>
    <% end %>

    <div class="actions">
      <%= f.submit %>
    </div>

<% end %>

配置/ routes.rb中

  match 'california/:id' => 'california#edit', via: :get
  match 'california/:id' => 'california#update', via: :post

测试/功能/ california_controller_test.rb

require 'test_helper'

class CaliforniaControllerTest < ActionController::TestCase
  def setup
    Californium.delete_all
  end

  test "form" do
    cal = Californium.create(name: 'Benjamin Spock', license_type: 'MD', address: Address.new(street: '311 Temple St', city: 'New Haven', state: 'CT', zip: '06511'))
    assert_equal(1, Californium.count)
    p Californium.find(cal.id)
    get :edit, id: cal.id
    assert(assigns(:californium))
    assert_response(:success)
    puts @response.body
  end
end


文章来源: Access subcollection in mongoid with rails form to edit and create new entry