Ruby on rails 在何处放置在许多视图上使用的代码
目前,我的\u header.html.erb部分中有这段代码,由application.html.erb使用Ruby on rails 在何处放置在许多视图上使用的代码,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,目前,我的\u header.html.erb部分中有这段代码,由application.html.erb使用 <% current_user.achievements.each do |achievement| %> <li><%= link_to achievement.header_string, polymorphic_path(achievement.achievementable) %></li> <% end %>
<% current_user.achievements.each do |achievement| %>
<li><%= link_to achievement.header_string, polymorphic_path(achievement.achievementable) %></li>
<% end %>
当前用户的成就似乎更适合放在控制器中?但我不知道该把它放在哪里,这与这里标题中关于堆栈溢出的成就类似。如果用户登录,此代码将在所有视图中使用。我将使用助手方法将其放入应用程序控制器中
helper_method :achievements
def acheivements(current_user)
current_user.achievements.each do |achievement|
<do stuff>
end
helper\u方法:成就
定义成就(当前用户)
当前|u user.aggregations.each do|acgregation|
结束
然后,您可以从任何地方调用它,因为您的所有控制器都继承自应用程序控制器 我认为使用当前用户没有任何错误。在您的视图中,成就
,因为它将调用当前用户的成就一次,然后rails为您生成结果
<% current_user.achievements.each do |achievement| %>
<li><%= link_to achievement.header_string, polymorphic_path(achievement.achievementable) %></li>
<% end %>
如果您真的想把它放在某个地方,那么应用程序控制器就是您想要的地方
然后在您希望设置的任何操作上使用before filter
before_filter :achievements, only: [:your_methods]
TL;让它保持原样 实际上,你的问题可以用两种方式来回答: