2017-02-23 6 views
0

Ok, j'utilise Rails 5 et la dernière version stable de Ruby. Ce que je tente de faire est d'avoir une boîte de sélection ont l'option correcte sélectionnée sur la vue d'édition.Ruby on Rails - Formulaires pour sélectionner la liste déroulante Option sélectionnée sur Modifier

C'est ce que j'ai jusqu'à présent create_users

class CreateUsers < ActiveRecord::Migration[5.0] 
    def change 
     create_table :users do |t| 
     t.string :email 
     t.string :password 
     t.integer :user_type_id 
     t.timestamps 
     end 
    end 
end 
class CreateUserTypes < ActiveRecord::Migration[5.0] 
    def change 
     create_table :user_types do |t| 
     t.string :name 
     t.text :description 
     t.timestamps 
     end 
    end 
end 

Il n'y a pas de relations entre ces tables, tous UserType est juste une table de support. Je peux l'obtenir pour sortir la liste déroulante et enregistrer dans la base de données Je ne peux pas obtenir la chose darn pour afficher l'option sélectionnée appropriée sur l'édition.

Voici mon code sous forme

<%= form_for(user) do |f| %> 
     <% if user.errors.any? %> 
     <div id="error_explanation"> 
      <h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2> 

      <ul> 
      <% user.errors.full_messages.each do |message| %> 
      <li><%= message %></li> 
      <% end %> 
      </ul> 
     </div> 
     <% end %> 



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

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

     <div class="field"> 
     <%= f.label :user_type_id %> 

     <%#= select_tag('user_type', options_for_select(UserType.all.collect {|ut| ut.name ut.id})) %> 
     <% user_type_array = UserType.all().map { |type| [type.name, type.id]} %> 
     <%= f.select(:user_type_id, options_for_select(user_type_array), :selected => f.object.user_type_id) %> 
     <%#= options_from_collection_for_select(UserType.all(), :id, :name) #just outputs text %> 
     <%#= f.select_tag('user_type_id', options_from_collection_for_select(UserType.all(), :id, :name)) %> 
     </div> 
    <%= params.inspect %> 
     <div class="actions"> 
     <%= f.submit %> 
     </div> 
    <% end %> 

Répondre

1

Utilisez la valeur options_for_select, il prend un paramètre selected en option:

options_for_select(user_type_array, f.object.user_type_id) 
+0

Parfait merci! Travaillé comme un charme, forms_for peut être un peu confus parfois! Merci encore! –