如果某个资源未获得授权,CanCanCan会显示本地化的Flash消息。CanCanCan在哪里可以定义flash“%{subject}”,以及如何修改以符合Rails本地化约定?
https://github.com/CanCanCommunity/cancancan/wiki/Translations-(i18n)
# en.yml
en:
unauthorized:
manage:
all: "You do not have access to %{action} %{subject}!"
我已经通过GitHub库挖了,但我不能找出subject
变量是如何定义的。
从输出中,我猜想subject
被定义为类似object.class.name.underscore
的东西。
我想改变它以使用object.model_name.human
。
这将使它与Rails约定更加一致,并且更易于本地化。
en:
activerecord:
models:
mymodel: MyLocalizedSubjectName
有人点我定义subject
代码,还是建议我怎么能修补CanCanCan使用本地化模型的名字呢?
谢谢@paul。我的问题是,使用'underscore'的当前实现不支持命名空间类。例如,如果subject是一个'Namespace :: Model',那么这个方法返回与'humanize'或Rails语言环境文件不兼容的'namespace/model'。我正在考虑修补此方法,并用'subject.model_name.param_key.humanize'替换'subject.class.to_s.underscore.humanize'。这听起来合理吗?还是我错过了CanCanCan实现的明显特点? –
对不起,我的意思是'subject.model_name.human' –
听起来对我来说很合理!我确定内联条件是有原因的,所以我会说:'variables [:subject] =(subject.class == Class?subject:subject.class).model_name.human'。例如'ActiveRecord :: Base.model_name.human'只给出''Base''。 –