【问题标题】:How to call helper method from model?如何从模型中调用辅助方法?
【发布时间】:2012-12-30 07:02:15
【问题描述】:

我在带有 MongoID gem 的 Rails 应用程序中使用 MongoDB 作为数据库。我想使用 n aafter_create 回调方法从模型中调用辅助方法。这怎么可能?
我的型号代码是:

class Department
  include ApplicationHelper
  after_create :create_news
  private
  def create_news
    @user = ApplicationHelper.get_current_users
  end
end

我的帮助代码是:

module ApplicationHelper
  def get_current_users
    current_user
  end
end

当我创建新部门时,出现以下错误。

undefined method `get_current_users' for ApplicationHelper:Module

如何消除错误?
提前致谢。

【问题讨论】:

  • 你为什么要让这个帮手?助手往往用于为您的视图生成标记。这个方法看起来像是属于一个模型。
  • 我做这个助手来获取模型中的当前用户信息。
  • 然后让它成为你模型中的一个方法?
  • 我不能在模型中使用 current_user。所以我尝试了替代
  • 我的实际问题是:quora.com/Ruby-on-Rails/…

标签: ruby-on-rails ruby-on-rails-3 model


【解决方案1】:

我也使用 mongoid 并且一直使用它。不过,这不应该是 mongoid 独有的。

ApplicationController.helpers.my_helper_method

【讨论】:

  • 这似乎在以后的 rails 版本中被故意破坏,因为 team-rails 认为我们不应该这样做。因此,只需“重复自己”并在两个位置添加评论,这样您就知道要同时在两个位置进行更改。或者,您可以使用“模块”功能——但这对于小事来说太过分了。
【解决方案2】:

如果你想要一个可以在你的视图中使用的帮助方法来返回当前用户,你可以在你的 ApplicationController 中这样做,例如:

private
def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end 
helper_method :current_user

然后你可以在任何视图中使用它。

如果您希望模型中的某个任意方法知道它正在处理的用户是什么,传递 @current_user 在您在控制器中调用该方法时作为该方法的参数强>。

您的代码似乎不完整,所以我看不出您要完成什么,但这是一种非常标准的做法。

【讨论】:

  • 如何获取模型中@current_user的值
  • @gami 您的控制器通常处理实例化模型并将数据传递给它。将@current_user 传递给它,就像传递任何其他数据一样。您应该发布更多代码,例如使用此模型的控制器。
【解决方案3】:

确保模块文件命名正确,在您的情况下意味着 application_helper.rb 并且它位于帮助程序库中。

您也可以尝试在 ApplicationController (app/controller/application_controller.rb) 中包含帮助程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2012-05-12
    • 2011-08-03
    相关资源
    最近更新 更多