2009-05-27 8 views
0

Comment puis-je placer un lien en haut de ma page lorsque l'URL vers laquelle il pointe n'est pas déterminée plus tard sur la page. Dans cet exemple, je souhaite déplacer les liens Créer et Modifier un scénario vers le haut de la page, mais comme vous pouvez le voir, le scénario d'édition dépend de la connaissance préalable du @scenario_id.Placer un lien en haut

<%= will_paginate @scens, :next_label => 'Older', :prev_label => 'Newer' %> 
<div class="box"> 

<% for scenario in @scens %> 
    <% @created = scenario.created_at %> 
    <% @updated = scenario.updated_at %> 
    <% @scenario_id = scenario.id %> 
    <% if scenario.scenario_image.exists? %> 
     <%= scenario_image_tag(scenario) %> 
    <% end %> 
    <%= simple_format(scenario.description) %> 
<% end %> 
</div> 

<% if session[:role_kind] == "controller" %> 
    <p> 
    <%= button_to "Create new scenario", :action => "create" %> 
    <% if @scens.size > 0 %> 
     <%= button_to "Edit scenario", :action => "edit", :id => @scenario_id %> 
    <% end %> 
    </p> 
+0

Votre code est en boucle sur @scens et seulement pour le tout dernier scénario il y a un lien "Edit scenario". Est-ce exact? –

+0

Une bibliothèque de pagination est utilisée. Ainsi, chaque page Web n'affiche qu'un seul scénario. La variable, scénario, est le scénario actuel affiché. – alamodey

Répondre

1

Vous pouvez ajouter le lien en haut, mais vous aurez besoin d'accéder par programme ultérieurement puis attribuez-lui l'URL à elle. Cela nécessite une sorte de référence ou de capacité de recherche, je pense au javascript côté client, mais c'est parce que je ne connais pas Ruby.

Vous pouvez également créer le lien plus tard lorsque vous avez l'URL et placer le lien en haut en utilisant le positionnement CSS. La position réelle de tous les éléments DOM sur la page ne doit pas correspondre à l'ordre dans lequel ils sont rendus.

0

Une façon de faire est d'utiliser un assistant:

Dans votre fichier helper.rb:

def stack_example(scens, &block) 
    html = 'Scenario Details' 
    edit_link = 'Edit Link' 
    yield html, edit_link 
end 

Ensuite, dans votre partiel que vous pourriez avoir quelque chose comme:

<% stack_example(@scens) do |html, edit_link| %> 
    <%= edit_link %><br> 
    <%= html %> 
<% end %> 

Devrait générer les éléments suivants:

Edit Link 
Scenario Details 
0

Je ne comprends pas. Pourquoi créez-vous un modèle dans la couche de vue? Pourquoi ne pas créer les variables du modèle dans le contrôleur? Sth like:

class your_controller 
    def your_method 
    @scenario_id = ... 
    end 
end 

Je pense que votre problème réside dans l'utilisation MVC invalide. Ne pensez-vous pas que toutes les @ variables @member doivent être initialisées avant que la vue ne commence à s'afficher?

Questions connexes