2009-05-27 5 views
0

リンク先のURLがページの後になるまで決定しない場合は、ページの上部にリンクを配置するにはどうすればよいですか。この例では、Create and Edit Scenarioリンクをページの上部に移動したいと思いますが、Edit Scenarioは@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

ページライブラリが使用されています。したがって、各Webページでは1つのシナリオしか表示されません。変数シナリオは、表示されている現在のシナリオです。 – alamodey

答えて

1

リンクは最上部に追加できますが、プログラムで後でアクセスしてからURLを割り当てる必要があります。それには何らかのリファレンスやルックアップ機能が必要ですが、私はクライアントサイドのJavaScriptを考えていますが、それはRubyを知らないからです。

また、URLを持っているときにリンクを作成し、CSS配置を使用して上部にリンクを配置することもできます。ページ上のすべてのDOM要素の実際の位置は、レンダリングされる順序と一致する必要はありません。あなたのhelper.rbファイルで

:これを行うには

0

一つの方法は、ヘルパーを使用することです

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のように:

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

あなたの問題は、無効なMVCの使用法にあると考えます。ビューがレンダリングされる前に@member @variablesをすべて初期化する必要はないと思いませんか?

関連する問題