在模型文件中调用Helper方法,不起作用

时间:2015-07-07 11:24:44

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller

在控制器的create方法中,我有:

if logged_in_admin?
  @invitation.set_ids

在邀请模型中:

def set_ids
  self.person_one_id = current_user.id
end

current_user是app / helpers / sessions_helper.rb中的一个方法,用于定义当前登录的用户。我在许多控制器方法中成功使用此方法。但是,对于上面的用例,我收到错误消息undefined local variable or method 'current_user' for #<Invitation:0x007f699086bf40>

为什么会收到此错误消息?这是因为这次我在模型文件中使用了helper方法,这是不允许的?如果不允许这样做,那么为person_one_id安全设置@invitation等于当前登录用户的ID的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

current_user在模型图层中不可用(MVCCV图层上的助手和模型对current_user助手一无所知。从你的助手传递user_id作为参数:

some_helper.rb

def my_helper
  if logged_in_admin?
    @invitation.set_ids(current_user.id)
# .....

model.rb

def set_ids(user_id)
  self.person_one_id = user_id
end

答案 1 :(得分:0)

您必须将以下行添加到ApplicationController:

class ApplicationController < ActionController::Base
    protect_from_forgery with: :exception
    include SessionsHelper
end

现在您应该能够使用控制器/模型中的方法。