有没有办法在模型中找到当前的控制器名称?

时间:2016-10-06 11:26:47

标签: ruby-on-rails ruby devise

可以使用注册控制器和密码控制器更新用户模型。有没有办法找到在模型中调用哪个控制器更新方法。?

我想在模型中找到控制器名称。请帮帮我。

4 个答案:

答案 0 :(得分:4)

模型和控制器层是分开的。模型不知道任何与控制器相关的东西。

在模型中获取控制器名称的唯一方法是将控制器的名称作为参数传递给模型中定义的某个方法。

我从未真正意识到在模型中知道控制器的名称。这样的需要恕我直言,意味着你设计错了。

答案 1 :(得分:1)

我认为邀请的用户尚未激活。那么如何仅在活跃用户上定义您的状态验证呢?也许通过添加这样的东西:

validates_presence_of :phone_number, if :activated?

我还没有对代码进行过测试,所以它不是安全的;)

答案 2 :(得分:0)

可能的解决方案是:

class User < ActiveRecord::Base
    with_options :if => :phone_required do |user|
        user.validates_presence_of :phone
    end
end

phone_required是数据库列,因此您需要为用户创建迁移。

在您的控制器中,您需要设置

your_user.phone_required = false

your_user.phone_required = true
保存前

答案 3 :(得分:0)

我强烈反对这种做法,因为模型应该忽略控制器,但如果在模型中使用虚拟属性则不难实现

class SomeModel < ActiveRecord::Base
  attr :controller
end

现在..您可以在更新时传入控制器,例如:

class SomeModelsController < ApplicationController
  def update
    @some_model.update_attributes(params[:some_model].merge(controller: self))
  end
end