2011-09-22 1 views
0

Ceci est ma forme:problèmes avec une forme liste déroulante en Ruby on Rails

<table> 
    <tbody> 
    <% form_for :HhActiveCarrier, @carriers, :url => { :action => "update" } do |f| %> 
    <% for carrier in @carriers %> 
    <tr> 
     <%= render :partial => "summary_detail", :locals => {:carrier => carrier, :f => f} %> 
    </tr> 
    <% end %> 
    </tbody> 
</table> 
    <%= submit_tag "Update" %> 
    <% end %> 

Avec mon partielle:

<td class="tn"><%= h(carrier.name.to_s()) -%></td> 
<td class="sc"><%= h(carrier.country.to_s()) -%></td> 
<td class="sc"><%= select_tag(:country, options_for_select(@countries)) -%></td> 

C'est le contrôleur où je définir les variables:

class ActiveCarriersController < ApplicationController 

    def index 
     @carriers = HhActiveCarrier.find(:all) 
     for carrier in @carriers 
      country = carrier["country"] 
      if country.nil? 
       carrier["country"] = "none" 
      end 
     end 
     @countries = ["USA", "UK", "Canada"] 
    end 

Tout cela fonctionne. Cependant, si je fais un changement dans la liste déroulante sous la forme à ceci:

<td class="sc"><%= f.select("country", @countries) -%></td> 

Je reçois cette erreur:

Showing app/views/active_carriers/_summary_detail.rhtml where line #3 raised: 

undefined method `country' for #<Array:0xef79a08> 

Extracted source (around line #3): 

1: <td class="tn"><%= h(carrier.name.to_s()) -%></td> 
2: <td class="sc"><%= h(carrier.country.to_s()) -%></td> 
3: <td class="sc"><%= f.select("country", @countries) -%></td> 

Trace of template inclusion: /app/views/active_carriers/_summary.rhtml, >/app/views/active_carriers/index.rhtml 

Qu'est-ce que je fais mal avec ma forme choisir? J'utilise Ruby on Rails 2.3.8

Stackoverflow me dit que je n'ai pas beaucoup d'explications pour tout le code que j'ai, alors je suis en train d'écrire. Je ne sais pas vraiment quoi d'autre à expliquer, alors posez des questions si vous ne comprenez pas tout. Aussi, je ne pouvais pas citer le message d'erreur parce que Stackoverflow me disait que j'avais du code qui n'avait pas les blocs de code, donc j'ai dû mettre des blocs de code autour du message d'erreur.

+0

Je pense que vous devez appeler options_for_select (@countries) pour convertir le tableau en options pouvant être sélectionnées. http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_for_select – lashleigh

+0

Je l'ai changé pour: <% = f.select (: country, options_for_select (@countries)) -%> et j'ai toujours la "méthode non définie' country 'pour # "erreur –

Répondre

0

Essayez ceci: f.select("carrier", "country", options_for_select(@countries))

+0

J'ai donc essayé: f.select (" carrier "," country ", options_for_select (@countries)). J'ai cette erreur: méthode non définie 'fusionner 'pour # . Après avoir lu ceci: http://stackoverflow.com/questions/4721058/undefined-method-merge-for-2fixnum. C'est ce qui a finalement fonctionné: <% = select (: carrier, "country", @countries) -%>. Merci! –

Questions connexes