如何使索引链接和显示操作在部分视图中起作用
How to make links for index and show actions work in partial views
我正在使用局部渲染我所有页面中布局文件夹中的导航栏,并且在导航栏中我有指向操作的链接,例如来自 GradesController 的索引和显示。我明白,为了使链接正常工作,我必须在控制器中该页面的操作中这样调用它们:
def home
@grades = Grade.all
end
然而,由于这些链接存在于 局部视图 中,它没有相应的控制器,我如何才能使这些链接正常工作而不会出现 NoMethodError?
layouts/_navbar.html.erb
<div class="main_nav_color">
<div class="wrapper">
<header id="main_header" class="cf">
<a href="#" id="logo">arabecademy</a>
<nav>
<ul>
<li>
<%= link_to "#" do %>
Grade<span class="glyphicon glyphicon-chevron-down"></span>
<% end %>
<ul>
<% @grades.each do |grade| %>
<li><%= link_to "Grade" + grade.grade_number, grade_courses_path(grade, @course) %></li>
<% end %>
</ul>
</li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<% if student_signed_in? %>
<li><%= link_to "Log Out", destroy_student_session_path, method: :delete %></li>
<li><%= link_to "Accout Settings", edit_student_registration_path %></li>
<% else %>
<li><%= link_to "Log in", new_student_session_path %></li>
<li><%= link_to "Sign Up", new_student_registration_path, :class => "button_sm button_orange" %></li>
<% end %>
</ul>
</nav>
</header>
</div>
</div>
要始终设置 @grades
,您可以像这样在 ApplicationController
中添加 before_filter
:
class ApplicationController
before_action :load_grades
def load_grades
@grades = Grade.all
end
end
这将确保除了动作本身所做的任何事情之外,每个控制器动作都有 @grades
设置。您的部分应该能够在您现在显示的任何地方获取 @grades
。
我正在使用局部渲染我所有页面中布局文件夹中的导航栏,并且在导航栏中我有指向操作的链接,例如来自 GradesController 的索引和显示。我明白,为了使链接正常工作,我必须在控制器中该页面的操作中这样调用它们:
def home
@grades = Grade.all
end
然而,由于这些链接存在于 局部视图 中,它没有相应的控制器,我如何才能使这些链接正常工作而不会出现 NoMethodError?
layouts/_navbar.html.erb
<div class="main_nav_color">
<div class="wrapper">
<header id="main_header" class="cf">
<a href="#" id="logo">arabecademy</a>
<nav>
<ul>
<li>
<%= link_to "#" do %>
Grade<span class="glyphicon glyphicon-chevron-down"></span>
<% end %>
<ul>
<% @grades.each do |grade| %>
<li><%= link_to "Grade" + grade.grade_number, grade_courses_path(grade, @course) %></li>
<% end %>
</ul>
</li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<% if student_signed_in? %>
<li><%= link_to "Log Out", destroy_student_session_path, method: :delete %></li>
<li><%= link_to "Accout Settings", edit_student_registration_path %></li>
<% else %>
<li><%= link_to "Log in", new_student_session_path %></li>
<li><%= link_to "Sign Up", new_student_registration_path, :class => "button_sm button_orange" %></li>
<% end %>
</ul>
</nav>
</header>
</div>
</div>
要始终设置 @grades
,您可以像这样在 ApplicationController
中添加 before_filter
:
class ApplicationController
before_action :load_grades
def load_grades
@grades = Grade.all
end
end
这将确保除了动作本身所做的任何事情之外,每个控制器动作都有 @grades
设置。您的部分应该能够在您现在显示的任何地方获取 @grades
。