2017-10-18 11 views
0

Je suis en train de faire de sélection sous forme, mais il ne fonctionne pas pour moi, j'ai essayéERB options_for_select avec Padrino/sinatra

<%= f.select :children, options_for_select(@children.collect { |child| [child.name, child.id]}) %> 

Et

@children.collect { |child| [child.name, child.id]}) 

cela fonctionne parfaitement pour moi pry.

=> [["Peter", 1], 
["John", 2], 
["Trish", 3], 

Mais il ne parvient toujours pas à

TypeError - no implicit conversion of Array into Hash: 

Je suis peu perdu :(

Avez-vous des conseils? S'il vous plaît

======== ==== EDIT:

C'est sous cette forme

<% error = @class.errors.key?(:children) && @article.errors[:children].count > 0 %> 
<fieldset class='control-group <%= error ? 'has-error' : ''%>'> 
    <%= f.label :children, :class => 'control-label' %> 
    <div class='controls'> 
    <% @children = Children.all %> 
    <%= f.select :children, options_for_select(@children.collect { |child| [child.name, child.id]}) %> 
    <span class='help-inline'><%= error ? f.error_message_on(:children) : "Ex: Article category" %></span> 
    </div> 
</fieldset> 

<% @author = session[:account_id] %> 
<%= f.hidden_field :author, :value => @author %> 
<input name="author" form='article' type="hidden" value="4" /> 

<div class="form-actions"> 
    <%= f.submit pat(:save), :class => 'btn btn-primary' %> 
    &nbsp; 
    <%= f.submit pat(:save_and_continue), :class => 'btn btn-info', :name => 'save_and_continue' %> 
    &nbsp; 
    <%= link_to pat(:cancel), url(:articles, :index), :class => 'btn btn-default' %> 
</div> 

La forme est invoquée par

<ul class="nav nav-tabs"> 
    <li> <%= link_to tag_icon(:list, pat(:list)), url(:articles, :index) %></li> 
    <li class="active"> <%= link_to tag_icon(:plus, pat(:new)), url(:articles, :new) %></li> 
</ul> 
<div class="tabs-content"> 
    <% form_for :article, url(:articles, :create), :class => 'form-horizontal' do |f| %> 
    <%= partial 'articles/form', :locals => { :f => f } %> 
<% end %> 
</div> 

Et il est appelé à partir du contrôleur, je ne sais pas comment mettre cela un peu plus, il est basé sur des modèles db, ils renvoient des données comme je l'ai écrit, mais cette forme ne fonctionne pas. J'ai essayé d'écrire une nouvelle partie de la forme, et pourtant le problème encore.


J'ai essayé d'utiliser uniquement le formulaire html, mais je ne peux pas dire la sélection d'envoyer des données via POST, je suis très faible en webmastering, je ne suis qu'un programmeur. Peut-être est le chemin, mais je ne sais pas comment faire les choses, quand je mets

et les valeurs (là, j'a pu générer de sélectionner bon. Mais il n'a pas envoyé de données.

+0

Impossible de reproduire. 'options_for_select ([[" Peter ", 1], [" John ", 2], [" Trish ", 3]]) =>" \ n Jean \ n "' ... Pouvez-vous fournir un [mcve]? L'exemple que vous avez donné ci-dessus fonctionne parfaitement. –

+0

Oh, pour moi son échec encore, il est utilisé dans l'admin généré à partir de Padrino, je vais essayer de poster plus de code, mais il est accroché dans un projet énorme. Publiera dans un instant – Levi

+0

Qu'est-ce que '@ children'? Vous n'avez pas montré où cela est défini dans votre code. Je suis également confus par la ligne: '@categories = Children.all' - vous n'utilisez pas la variable' @ categories' n'importe où? –

Répondre

0

je enfin résoudre le problème, je googlé un autre style d'utilisation

f.select(:state, :collection => @states, :fields => [:name, :id]) 

et je mets les données du modèle directement en forme et il fonctionne. la documentation sur les formes que j'ai utilisé a été construit dans l'autre sens à l'aide des tableaux et hachages, cela est mieux.

Merci!