Hi,

I am developing an application using:

ruby '2.0.0'
sinatra '1.4.4'
data_mapper: '1.2.0'

I am working with the following models:

##################### FILE: models.rb
require 'dm-core'
require 'dm-migrations'
require 'dm-validations'
require 'dm-types'
require 'date'
require 'dm-timestamps'
require 'bcrypt'
require 'date'
require 'dm-serializer'

DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/development.db")

class Property
    include DataMapper::Resource
    property :id, Serial
    property :address, String
    property :postal_code, String
    
    attr_reader :address, :postal_code
    
    # Associations
    belongs_to :country
    belongs_to :state
    belongs_to :city

    # Validations
    validates_length_of :address, :max => 75
    validates_length_of :postal_code, :max => 15
end

class Country
    include DataMapper::Resource
    property :id, Serial
    property :name, String, :required => true

    attr_reader :name

    # Validations
    validates_uniqueness_of :name
end

class City
    include DataMapper::Resource
    property :id, Serial
    property :name, String, :required => true

    attr_reader :name

    # Associations
    belongs_to :state
end

class State
    include DataMapper::Resource
    property :id, Serial
    property :name, String, :required => true

    attr_reader :name

    # Associations
    belongs_to :country
end
##################### END FILE: models.rb

In my application file I have the following verb that perform the UPDATE:

##################### FILE: main.rb

put '/properties/:id' do
    protected!
    @country_id = params[:country_id]
    @state_id = params[:state_id]
    @city_id = params[:city_id]

    @property = Property.get(params[:id])

    if @property.update(params[:property])
        flash[:notice] = trans('message.property.update')
        redirect to("/properties/#{@property.id}")
    else
        flash.now[:error] = @property.errors.full_messages * '</br>'
        erb '/property/edit_property'.to_sym, { :layout => 
:'/layouts/application' }
    end
end

##################### END FILE: main.rb

My problem is that when i change the selected Country, State or City value 
and request the update, @property.update(params[:property]) is not updating 
the new values on child associations. I´ve tried to change the name of the 
HTML SELECT on the erb to property[country_id], but no success:

##################### FILE: property_form.erb
<div class="form-group">
    <label for="country"><%= trans('models.general.country') %></label>
    <select class="form-control" id="countrySelect" name="country_id">
        <%= get_select_options(Country.list_options, @country_id) %>
    </select>
</div>
<div class="form-group">
    <label for="state"><%= trans('models.general.state') %></label>
    <select class="form-control" id="stateSelect" name="state_id">
    </select>
</div>
<div class="form-group">
    <label for="city"><%= trans('models.general.city') %></label>
    <select class="form-control" id="citySelect" name="city_id">
    </select>
</div>
<div class="form-group">
    <label for="address"><%= trans('models.general.address') %></label>
    <input class="form-control" type="text" name="property[address]" 
value="<%= @property.address %>">
</div>
<div class="form-group">
    <label for="postal_code"><%= trans('models.general.postal_code') 
%></label>
    <input class="form-control" type="text" name="property[postal_code]" 
value="<%= @property.postal_code %>">
</div>
<ul class="list-inline">
    <li><a href="<%= @back_href %>"><%= trans('actions.back') %></a></li>
    <li><button class="btn btn-default"><%= trans('actions.save') 
%></button></li>
</ul>
##################### END FILE: property_form.erb

Thenks in advance.

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to datamapper+unsubscr...@googlegroups.com.
To post to this group, send email to datamapper@googlegroups.com.
Visit this group at http://groups.google.com/group/datamapper.
For more options, visit https://groups.google.com/d/optout.

Reply via email to