अपने एम्बेडेड मॉडल के लिए फ़ॉर्म सहायक "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
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
टेस्ट/फंक्शनल/कैलिफ़ोर्निया_कंट्रोलर_टेस्ट.आरबी
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