我正在通过Michael Hartl的“学习Rails示例”教程(11.33)。相关代码是:
class PagesController < ApplicationController
def home
@title = "Home"
if signed_in?
@micropost = Micropost.new
@feed_items = current_user.feed.paginate(:page => params[:page])
end
end
class User < ActiveRecord::Base
def feed
Micropost.all(:conditions => ["user_id = ?", id])
end
module SessionsHelper
def sign_in(user)
user.remember_me!
cookies[:remember_token] = { :value => user.remember_token,
:expires => 20.years.from_now.utc }
self.current_user= user
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
@feed_items然后呈现为“will_paginate”的集合,一切正常。
我的问题是我无法理解current_user如何传递给PagesController行中的“feed”方法,即
“@ feed_items = current_user.feed.paginate(:page =&gt; params [:page])”
非常感谢任何帮助
艾伦
答案 0 :(得分:0)
很可能“current_user”是在控制器的paret类中定义的:ApplicationController。在控制器目录中搜索“application_controller.rb”。
答案 1 :(得分:0)
current_user
永远不会“传递”到feed
方法 - feed
方法在current_user
对象上称为。看一下用户模型:
def feed
Micropost.all(:conditions => ["user_id = ?", id])
end
这是一个在调用current_user.feed
时执行的实例方法。 id
哈希中的:conditions
引用用户对象实例的id
,在本例中为current_user
。