Forum: Ruby on Rails select in fields_for not selecting

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
812d47a4d6c863de5059670b1e33014f?d=identicon&s=25 Adam madd02 (madd02)
on 2009-01-14 22:48
I have a user who has a location that location contains a country_id.
Location has a polymorphic interface locatable.

What works:
The user can edit their name, country and city. This all saves to the DB
on the update put.

The problem:
Returning to the edit page shows the textfield's name and city populated
but the country select form element defaults to blank. The value for
user.location.country_id is saved in the DB but the form element refuses
to show this as "selected". I have attempted explicityly setting the
selected :option but still, it fails to show country.






MODEL

user
  has_one :location, :as => :locatable, :dependent => :destroy

location
  belongs_to :country
  belongs_to :locatable, :polymorphic => true

country
  has_many :locations


VIEW
<% form_for @user, :html => { :multipart => true } do  |form| %>

  <div class="text_field">
    <%= form.label :name %>
    <%= form.text_field :name %>
  </div>

<% fields_for "user[location_attributes]",@user.location do
|location_fields| %>
  <div class="select_field">
    <%= location_fields.label :country_id %>
    <%= location_fields.select :country_id, Country.find(:all).map { |c|
[c.name.titleize, c.id] }, { :include_blank => true } %>
  </div>
  <div class="text_field">
   <%= location_fields.label :city %>
   <%= location_fields.text_field :city %>
  </div>
<%- end -%>

  <%= form.submit 'Update' %>
<% end %>

CONTROLLER

  def edit
    @user = User.find(params[:id])
  end


  def update
    @user = User.find(params[:id])
    @user.attributes = params[:user]
    @user.save!
    flash[:notice] = "Your profile has been updated."
    redirect_to url_after_update

  rescue ActiveRecord::RecordInvalid
    render :action => "edit"
  end
812d47a4d6c863de5059670b1e33014f?d=identicon&s=25 Adam madd02 (madd02)
on 2009-01-14 23:11
I forgot to mention.
 I adjusted the fields_for name to "user[location]" in case
"_attributes"  was causing the problem.
0be632597cfef5a575aec898bfb5a071?d=identicon&s=25 DK (Guest)
on 2009-01-15 15:48
(Received via mailing list)
You may want to consider adding attr_accessible for the editable
fields in your model.

/dkm



On Jan 14, 5:11 pm, Adam madd02 <rails-mailing-l...@andreas-s.net>
812d47a4d6c863de5059670b1e33014f?d=identicon&s=25 Adam madd02 (madd02)
on 2009-01-15 19:41
Thanks for your reply DKM,

I have location_attributes listed in the users attr_accessable list and
use attr_protected for the :locatable_id and :locatable_type in
location.

Just to check that there are no attribute access issues i commented out
attr_accessible and attr_protected's in the user and location models. It
still did not set the select.

I believe it's soemthing to do with the select name generated from the
fields_for.
<select name="user[location_attributes][country_id]"
id="user_location_attributes_country_id">
.
.


but im not sure what.
This topic is locked and can not be replied to.