Ruby on rails 在控制器内调用方法模型
我有以下模型; (app/models/student\u disactivation\u log.rb)Ruby on rails 在控制器内调用方法模型,ruby-on-rails,methods,controller,Ruby On Rails,Methods,Controller,我有以下模型; (app/models/student\u disactivation\u log.rb) class StudentInactivationLog
class StudentInactivationLog
如果学生无法登录,我想在系统上向他们展示他们的停用原因
我如何从该控制器文件调用我的失活原因?可能吗
提前谢谢 这只是一个常量,所以你可以在任何地方称它为常量
StudentInactivationLog::INACTIVATION_REASONS
更新
我意识到实际上您想要的是使用一个原因码或保存在db中的短名称来表示字符串
如果是这样,我建议您直接使用短名称作为散列。“id”对于这个轻型机箱看起来是多余的
INACTIVATION_REASONS = {"HTY"=>"You didn't study enough!",
"KS"=>"Graduated!",
"SBK"=>"Other Reason"}
validates :inactivation_reason, inclusion: { in: INACTIVATION_REASONS.keys,
message: "%{value} is not a valid short name" }
def full_reason_message
INACTIVATION_REASONS[self.inactivation_reason]
end
然后,在控制器中显示原因的完整消息
reason = @student.full_reason_message
这就是我的想法。我还没有查过你的其他型号代码。您需要将reason保存为短名称而不是id,如果您决定以这种方式使用它,则需要修改/删除一些代码。当我这样称呼它时:flash.now.alert studentinactiviationlog::INACTIVATION_REASONS.collect{v | v[:name]}只列出所有的停用原因,与student无关。似乎对我不起作用:student::SessionController中的NoMethodError#为nil:nilclass创建未定义的方法“full_reason_message”这不是我方法的问题。你的学生实例为零,这就是原因。你需要找到原因。
INACTIVATION_REASONS = {"HTY"=>"You didn't study enough!",
"KS"=>"Graduated!",
"SBK"=>"Other Reason"}
validates :inactivation_reason, inclusion: { in: INACTIVATION_REASONS.keys,
message: "%{value} is not a valid short name" }
def full_reason_message
INACTIVATION_REASONS[self.inactivation_reason]
end
reason = @student.full_reason_message