整个Rails应用程序中的模型访问

时间:2013-08-27 19:42:49

标签: ruby-on-rails

Ruby 1.9.3 + Rails 3.2.8

我有一个视图,在我的app中的每个页面上呈现在partial:

<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

...等

有没有办法让 syncs 模型可以通过以某种方式将其包含在我的应用程序控制器中随处可用?

2 个答案:

答案 0 :(得分: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声明了,它就能正常工作。

答案 1 :(得分: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!此处以及另一个之上。