2011-10-30 4 views
0

Dans un projet de rails, j'ai deux entités, Utilisateurs et Institutions, elles ont une relation plusieurs-à-plusieurs. Les points de vue pour eux sont configurés pour créer de nouveaux utilisateurs et institutions, mais je veux avoir une autre vue pour relier les deux. Dans
rails consolent tout ce que je dois faire estRails reliant la soumission de formulaire à l'objet

myuser.institutions << the_institution_i_just_created 

Le contrôleur peut faire une partie du travail, mais comment puis-je gérer les soumissions et les formulaires? Je veux utiliser une boîte de sélection afin que la contribution soit limitée aux institutions déjà existantes.

<select id="institution_selection" name="institution_sel"> 
<% selections = [] 
    Institution.all.each do |institution| 
     pair = [institution.name, institution.id] 
     selections.concat([pair]) 
    end 
    %> 
    <%= options_for_select(selections) %> 
</select> 

La question est en résumé comment puis-je mapper cette soumission à un objet de telle sorte que dans le contrôleur que je peux faire ajouter à la relation?

La solution est:

Bon, c'est la solution que je suis venu avec, je suis sûr qu'il ya une meilleure façon de s'y prendre et je vais continuer à examiner, mais au moins je a quelque chose à ce que je visais

def test 
    if !session[:user] 
    redirect_to users_path, notice: "Please login first" 
    end 
    if params[:institution] 
    @user = User.find(session[:user]) 
    @institution = Institution.find(params[:institution][:id]) 
    @user.institutions << @institution 
    redirect_to @user, notice: "Institution was successfully added " 
    end 
end 

et pour la vue

<%= form_tag("https://stackoverflow.com/users/test", :method => "post") do %> 
<%= collection_select :institution, :id, Institution.all, :id, :name %> 
<%= submit_tag("Search") %> 
<% end %> 

Répondre

0

Utilisez collection_select

+0

Cela a très bien fonctionné pour la boîte de sélection! Beaucoup plus simple que la façon dont j'y allais mais comment lier (at) instancevar ci-dessus à quelque chose que je peux utiliser dans le contrôleur. donc dans le contrôleur comment puis-je accéder à ce – lukecampbell

+0

que voulez-vous dire par "lien vers sth."? – davidb

+0

Je suis assez proche, j'ai changé la "question" parce que je ne suis pas autorisé à poster ma propre réponse jusqu'à ce que j'ai plus de réputation ... – lukecampbell

Questions connexes