2010-12-08 11 views
3

Je ne sais pas comment retourner les valeurs vérifiées. Il est mon codeRails, case à cocher

controller: 

    def index 

    // there I would like to get checked cities 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @cities } 
    end 

    end 


viewer: 

    <%= render 'form' %> 


_form: 

    <% for cities in Database.find(:all) %> 
    <div> 
    <%= check_box_tag cities.city1 %> 
    <%= cities.city1 %> 
    </div> 
    <% end %> 

EDIT

J'ai essayé:

@cities = Database.find(:all) 
params[:cities].each do |city| 
    ... 
end 

et

<% for city in @cities %> 
<%= check_box_tag "cities[]", city.id %> <%= city.city1 %> 
<% end %> 

mais eu erreur:

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each 

Répondre

5

Salut Votre problème semble être similaire à HABTM par des cases à cocher essayer

<%form_tag "some_action", :method => :post do %> 
    <% Database.find(:all).each do |city| %> 
    <div> 
     <%= check_box_tag "cities[]",city.city1, :false %> 
     <%= citiy.city1 %> 
    </div> 
    <% end %> 
<%end%> 

et à l'intérieur contrôleur

def some_action 
    if !request.post? 
    @cities = Database.find(:all) 
    render 'view' 
    else 
    params[:cities].each do |city| 
     ... 
    end 
    redirect_to view_path 
    end 
end 
+2

Encore une chose c'est une mauvaise idée de faire des demandes à la db de vue Vous devriez le faire à l'intérieur du contrôleur – Bohdan

+0

J'ai essayé de demander à db du contrôleur, mais j'ai eu une erreur. Je pense que quelque chose ne va pas avec params [: cities] .each do | city | .. fin parce que sans cela, je peux vérifier les cases. – Martynas

+0

vous ne faites aucune différence entre les requêtes POST et GET Pour rendre params [: cties] disponible vous devez envoyer des données à partir de votre formulaire – Bohdan

2

Pour ce faire, vous aurez envie de parcourir la liste des villes et ajouter un check_box_tag avec le nom "villes []" pour chacun.

Je fournis généralement la liste en tant que variable à utiliser dans la vue. Faites le Database.find dans le contrôleur.

<% for city in @cities %> 
    <%= check_box_tag "cities[]", city.id %> <%= city.name %> 
<% end %> 

Remarque - si aucune cases sont cochées, rien ne sera soumis à l'param - à savoir, il n'y aura pas de « villes [] » du tout param. Vous devrez peut-être ajouter ceci en fonction de la logique de votre recherche. Si oui, ajoutez au formulaire ...

<%= hidden-field_tag "cities[]", '' %> 

Ou vous pouvez le gérer dans le contrôleur.

+0

J'ai essayé mais j'ai eu une erreur. voir EDIT – Martynas

+0

un problème avec params [: cities] .each do | city | ... fin car sans cela je peux cocher les cases (mais seulement vérifier, ne pas obtenir les paramètres) – Martynas

+0

L'erreur est due à la variable @cities étant nulle. Créez @cities dans l'action du contrôleur. – Swards

1

Mettez un débogueur dans votre code de contrôleur. Que se passe-t-il lorsque vous inspectez vos params? Y a-t-il quelque chose de similaire à params [: cities]? Si oui, qu'y a-t-il?