0

Ruby 1.9.3 + Rails 3.2.8

我有一个视图,在我的应用程序的每个页面上都呈现在一个局部:

<span id="sync-time">      
  <%= @sync.dropbox_last_sync.strftime('%b %e, %Y at %H:%M') %>
</span>

为了使用我的syncs模型并访问该dropbox_last_sync方法,我必须将它包含在整个应用程序的每个控制器中。例如:

class EntriesController < ApplicationController
  def index
    @sync = current_user.sync
  end
end

...

class CurrenciesController < ApplicationController
  def index
    @sync = current_user.sync
  end
end

...ETC。

有没有办法通过以某种方式将模型包含在我的应用程序控制器中来使模型在任何地方都可用?syncs

4

2 回答 2

2

您应该能够在应用程序控制器中添加 before_filter:

before_filter :setup_sync

def setup_sync
  if current_user
    @sync = current_user.sync
  end
end

您需要注意 setup_sync 过滤器在您用于设置 current_user 的任何代码之后运行。这可能是另一个 before_filter,但前提是您在当前用户过滤器之后before_filter :setup_sync声明它会正常工作。

于 2013-08-27T19:45:05.050 回答
0

这个更好:

class ApplicationController < ActionController::Base
  before_filter :authenciate_user!
  before_filter :index

  def index
    @sync = current_user.sync
  end
end

你一直在使用current_user,所以你需要在before_filter :authenciate_user!这里以及在另一个之上。

于 2013-08-27T19:46:11.417 回答