2009-05-27 4 views
0

Как разместить ссылку в верхней части моей страницы, когда URL-адрес, на который он указывает, не определен до поздней страницы. В этом примере я хочу переместить ссылки «Создать и редактировать сценарии» в начало страницы, но, как вы можете видеть, «Редактировать сценарий» зависит от того, зная сначала @scenario_id.Размещение ссылки наверх

<%= 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

Ваш код зацикливается на @scens, и только для самого последнего сценария есть ссылка «Изменить сценарий». Это верно? –

+0

Используется библиотека разбиения на страницы. Таким образом, каждая веб-страница отображает только один сценарий. Переменная, сценарий, - текущий отображаемый сценарий. – alamodey

ответ

1

Вы можете добавить ссылку наверху, но вам потребуется программно получить к ней доступ позже, а затем присвоить ей URL. Для этого нужна какая-то ссылка или возможность поиска, я думаю о клиентском javascript, но это так, как я не знаю Ruby.

Альтернативно вы можете создать ссылку позже, когда у вас есть URL-адрес, и поместите ссылку вверху, используя позиционирование CSS. Фактическое положение всех элементов DOM на странице не обязательно должно соответствовать порядку, в котором они отображаются.

0

Один из способов сделать это является использование помощника:

В файле helper.rb:

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

Тогда в вашем парциальное вы могли бы иметь что-то вроде:

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

Должны выводиться следующие данные:

Edit Link 
Scenario Details 
0

Я не понимаю. Почему вы создаете модель на уровне представления? Почему бы вам не создать переменные модели в контроллере? Sth like:

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

Я думаю, что ваша проблема связана с неправильным использованием MVC. Вам не кажется, что все @member @variables должны быть инициализированы до того, как представление начнет рендерить?

Смежные вопросы