刘华佼的全栈学习记录

5-10 helper_method是什么东东?

| Comments

教材5-4 Step 3: 购物车设计 Part 2里有出现一句helper_method :current_cart

class ApplicationController < ActionController::Base

……

+  helper_method :current_cart

+  def current_cart
+    @current_cart ||= find_cart
+  end

……

helper_method :current_cart是啥意思呢?

我们是想在app/views/common/_navbar.html.erb里用到current_cart.products.count:

<ul class="nav navbar-nav navbar-right">
+ <li>
+    <%= link_to "#" do  %>
+       购物车 <i class="fa fa-shopping-cart"> </i> ( <%= current_cart.products.count %> )
+    <% end %>
+ </li>

如果我们把helper_method :current_cart删掉,保存,CMD+R刷新http://localhost:3001/,会出现报错:

undefined local variable or method `current_cart' for #<#<Class:0x007fbdab1da860>:0x007fbdaa90cfa8>
Did you mean?  current_user

恢复后,就没有报错了。

这说明app/controllers/application_controller.rb里加的这句helper_method :current_cart,能够让app/views/common/_navbar.html.erb知道current_cart是什么东东。

正式的解释是:

helper_method declare a controller method as a helper. It makes the controller methods available to the view.

即helper_method宣告 一个controller method为一个helper,这样能够让view里的文件可以使用这个controller method。教材5-4 Step 3: 购物车设计 Part 2,就是宣告controller method current_cart是一个helper,这样view里的app/views/common/_navbar.html.erb就可以使用current_cart这个controller method了。

参考资料:

helper_method 與 view_context
helper_method(*meths)

Comments

comments powered by Disqus