Coba gunakan bantuan formulir "fields_for" untuk model tersemat Anda seperti pada contoh kerja berikut. Semoga ini membantu.
Butuh beberapa saat untuk mengatasi kesalahan ketik dan inkonsistensi, jadi jika Anda menginginkan jawaban yang lebih cepat di masa mendatang, harap buat pertanyaan Anda seakurat dan seminimal mungkin.
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
app/views/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 %>
config/routes.rb
match 'california/:id' => 'california#edit', via: :get
match 'california/:id' => 'california#update', via: :post
tes/fungsional/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