我有一个动态标题,具体取决于控制器的视图和操作,它可以正常使用" welcome_controller"中的操作。但是在这种情况下,我无法从不同的控制器触发一个动作posts_controller。
如何正确触发?提前致谢。
<% if params[:action] == 'index' %>
<%= image_tag("header_background.jpg", alt: "header background", :class => "header_background") %>
<% elsif params[:action] == 'trading' %>
<%= image_tag("trading_background.jpg", alt: "trading background", :class => "header_background") %>
<% elseif ... HOW TO TRIGGER A ACTION FROM A DIFFERENT CONTROLLER? %>
<% end %>
答案 0 :(得分:2)
有两个助手可以轻松获得:controller_name
和action_name
。您可以使用这些组合进行条件渲染。
那就是说,就我个人而言,我觉得这种观点很混乱 - 我不能不觉得这会更好地设置在其他地方。从一个非常简单的意义上讲,您可以在控制器中添加以下内容:
def index
@header_image = "header_background.jpg"
end
def trading
@header_image = "trading_background.jpg"
end
然后在视图中:
image_tag(@header_image, alt: @header_image, :class => "header_background")
或者,您可以遵循图像惯例:
image_tag("#{controller_name}/#{action_name}.jpg", alt: action_name, :class => "header_background")
然后确保您的标题图像存储在以控制器命名的文件夹中,以相关操作命名。
我非常倾向于后者。
更新:最后一个选项是定义一个处理此问题的帮助程序,例如,在您查看中:
= header_image_tag
在/helpers
文件夹中的某处,类似于:
def header_image_tag
image_path = case controller_name
when "controller_one"
"header_background.jpg" if action_name == "index"
"trading_background.jpg" if action_name == "trading"
when "controller_two"
# ...
else
"default_image.jpg"
end
image_tag image_path, alt: # ...etc
end
我认为帮助者可以访问controller_name
和action_name
,但如果不是,您可以将这些作为参数传递给header_image_tag
,或者传递{{ 1}}作为arg并访问request
和request.controller_name
。
让我知道你的想法和你的成就。
答案 1 :(得分:1)
为此,我使用此代码。这应该适合你想要实现的目标。
<% if controller.controller_name.to_s == "posts" && controller.action_name.to_s == "index" %>
另外请注意,如果您需要更精确地使用要定位的特定控制器,还可以将控制器名称添加到检查中。
https://{FunctionAppName}.azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName={EventGridTriggerFunctionName}&code={masterKey}