Ruby on rails Rails 5:模块中的控制器动作
我意识到这是违反MVC原则的,但是如何访问类中包含的模块中的控制器名称/方法呢Ruby on rails Rails 5:模块中的控制器动作,ruby-on-rails,model-view-controller,ruby-on-rails-5,Ruby On Rails,Model View Controller,Ruby On Rails 5,我意识到这是违反MVC原则的,但是如何访问类中包含的模块中的控制器名称/方法呢 模块文档HTMLbox 扩展ActiveSupport::关注点 包括做 def图标_或_文本(变量) 如果controller.action_name==“发送” “#{variable.name.capitalize}#{variable.text}\n” 其他的 变量。格式! 结束 结束 结束 结束 如何访问模块中的控制器和/或控制器.action\u name?假设您将此问题包括在控制器中,那么图标或文本方
模块文档HTMLbox
扩展ActiveSupport::关注点
包括做
def图标_或_文本(变量)
如果controller.action_name==“发送”
“#{variable.name.capitalize}#{variable.text}\n”
其他的
变量。格式!
结束
结束
结束
结束
如何访问模块中的
控制器
和/或控制器.action\u name
?假设您将此问题包括在控制器中,那么图标或文本方法self中就是控制器。您只需调用action_name,而无需在其前面加上controller
module DocumentHTMLBoxes
extend ActiveSupport::Concern
included do
def icon_or_text(variable)
if action_name == 'send'
"<b>#{variable.name.capitalize}</b> #{variable.text}\n"
else
variable.format!
end
end
end
end
模块文档HTMLbox
扩展ActiveSupport::关注点
包括做
def图标_或_文本(变量)
如果操作\u name==“发送”
“#{variable.name.capitalize}#{variable.text}\n”
其他的
变量。格式!
结束
结束
结束
结束
假设您将此问题包括在控制器中,那么图标或文本方法self中就是控制器。您只需调用action_name,而无需在其前面加上controller
module DocumentHTMLBoxes
extend ActiveSupport::Concern
included do
def icon_or_text(variable)
if action_name == 'send'
"<b>#{variable.name.capitalize}</b> #{variable.text}\n"
else
variable.format!
end
end
end
end
模块文档HTMLbox
扩展ActiveSupport::关注点
包括做
def图标_或_文本(变量)
如果操作\u name==“发送”
“#{variable.name.capitalize}#{variable.text}\n”
其他的
变量。格式!
结束
结束
结束
结束
我建议重构代码,使其更干净:
model_item.icon_or_text(variable, action_name)
module DocumentHTMLBoxes
extend ActiveSupport::Concern
included do
def icon_or_text(variable, action_name)
if action_name == 'send'
"<b>#{variable.name.capitalize}</b> #{variable.text}\n"
else
variable.format!
end
end
end
end
模块文档HTMLbox
扩展ActiveSupport::关注点
包括做
def图标或文本(变量、操作名称)
如果操作\u name==“发送”
“#{variable.name.capitalize}#{variable.text}\n”
其他的
变量。格式!
结束
结束
结束
结束
我建议重构代码,使其更干净:
model_item.icon_or_text(variable, action_name)
module DocumentHTMLBoxes
extend ActiveSupport::Concern
included do
def icon_or_text(variable, action_name)
if action_name == 'send'
"<b>#{variable.name.capitalize}</b> #{variable.text}\n"
else
variable.format!
end
end
end
end
模块文档HTMLbox
扩展ActiveSupport::关注点
包括做
def图标或文本(变量、操作名称)
如果操作\u name==“发送”
“#{variable.name.capitalize}#{variable.text}\n”
其他的
变量。格式!
结束
结束
结束
结束
在Rails中,
view\u context
对象包含来自控制器的所有IVAR,并包含所有帮助程序。它还提供对会话、cookie和请求的访问。渲染模板时,它是隐式的self
模型无法访问视图上下文-这是一个有意识的设计,因为它提供了一个很好的关注点分离
如果要破坏封装,需要将上下文传递给模型
module DocumentHTMLBoxes
extend ActiveSupport::Concern
included do
def icon_or_text(variable, context)
if context.action_name == 'send'
"<b>#{variable.name.capitalize}</b> #{variable.text}\n"
else
variable.format!
end
end
end
end
class Thing < ApplicationModel
include DocumentHTMLBoxes
end
现在,您可以在装饰模型上调用图标\u或\u文本
:
<% @things.each do |t| %>
<% t.icon_or_text %>
<% end %>
在Rails中,
视图\u上下文
对象包含来自控制器的所有IVAR,并包括所有助手。它还提供对会话、cookie和请求的访问。渲染模板时,它是隐式的self
模型无法访问视图上下文-这是一个有意识的设计,因为它提供了一个很好的关注点分离
如果要破坏封装,需要将上下文传递给模型
module DocumentHTMLBoxes
extend ActiveSupport::Concern
included do
def icon_or_text(variable, context)
if context.action_name == 'send'
"<b>#{variable.name.capitalize}</b> #{variable.text}\n"
else
variable.format!
end
end
end
end
class Thing < ApplicationModel
include DocumentHTMLBoxes
end
现在,您可以在装饰模型上调用图标\u或\u文本
:
<% @things.each do |t| %>
<% t.icon_or_text %>
<% end %>
请检查我的答案,了解如何执行此操作:您应该更新问题,以反映您试图将其包含在模型中,如您对答案的评论所示。请检查我的答案,了解如何执行此操作:您应该更新问题,以反映您试图将其包含在模型中,如您的评论所示对答案的评论。对不起,我应该详细说明。此关注点包含在模型中。如果它包含在模型中,则必须将信息传递到方法中。如果html“#{variable.name.capitalize}{variable.text}\n”else variable.format,我可能会使用关键字参数,例如def icon_或_text(variable,html:)!结束
然后像这样称呼它图标或文本(变量,html:action\u name=='send')
对不起,我应该详细说明一下。此关注点包含在模型中。如果它包含在模型中,则必须将信息传递到方法中。如果html“#{variable.name.capitalize}{variable.text}\n”else variable.format,我可能会使用关键字参数,例如def icon_或_text(variable,html:)!结束
然后像这样称呼它图标或文本(变量,html:action\u name=='send')
在旁注上-除非你想看起来像个白痴,否则千万不要将变量命名为“变量”。每个人都知道这是一个变量!无导轨的设计是有原因的@如果鼓励在模型中生成HTML,框架将提供对视图上下文的访问@既然rials有顾虑,是不是,请说明rails作者所说的根据模型这种方式是有味道的,但您没有;Don’不要在一开始就详细阐述这个问题,只是在旁注上声明它很臭——除非你想让自己看起来像个白痴,否则千万不要把变量命名为“variable”。每个人都知道这是一个变量!无导轨的设计是有原因的@如果鼓励在模型中生成HTML,框架将提供对视图上下文的访问@既然rials有顾虑,是不是,请说明rails作者所说的根据模型这种方式是有味道的,但您没有;I don’我一开始并没有详细说明问题,只是说问题很臭。。。