gpt4 book ai didi

ruby-on-rails-3 - 应用程序布局中的渲染引擎

转载 作者:行者123 更新时间:2023-12-03 09:02:02 24 4
gpt4 key购买 nike

背景

我正在创建一个由一个核心和几个模块组成的应用程序。这些模块是 rails 引擎,并提供实际功能,因为核心本身仅充当主机。
引擎托管于 /lib并安装在各自的路径上。

coreApp
└──lib
├── module1
├── module2
└── etc

然后像这样安装模块
mount Module1::Engine => "/module1", :as => "module1"
mount Module2::Engine => "/module2", :as => "module2"

核心还负责处理 session ,尽管登录本身是由模块完成的。

问题

我还没有找到与引擎共享核心应用程序布局的好方法。到目前为止,这就是我使引擎可以使用布局的方式:
coreApp
└── app
└── views
└── layouts
├── application.html.erb
└── core.html.erb

文件 core.html.erb只包含
<%= render :template => 'layouts/application' %>

然后像这样包含在每个模块中
module Module1
class ApplicationController < ActionController::Base
layout "core"
end
end

虽然它不是特别优雅,但它工作正常,并且模块的内容呈现在 yield 的位置。应用程序布局中的声明。

问题如下:

1. 模块特定样式表不包含在标题中

我需要一种方法来包含事件模块的样式表。

2. header 需要访问有关登录用户的信息

header 包含有关登录用户的信息,例如
Logged in as <%= @user[:realname] %>

这来自核心 home_controller
def index
@user = User.find_by_id(session[:user])
end

但是当我尝试访问该模块时,出现以下错误
NoMethodError in Module1/home#index

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]

显然是指 @user .

问题

如何在不对发动机侧进行过多篡改的情况下尽可能优雅和干燥地解决这个问题?

我已经用谷歌搜索了很多,但无法真正了解如何解决它。可能完全缺乏对 Rails 工作原理的了解,所以这个问题很可能对于熟悉 Rails 的人来说甚至没有意义。

如果有任何不清楚或模棱两可的地方,请发表评论,我会尽力详细说明。

最佳答案

我在我的应用程序中也做了同样的事情。我所做的只是:

  • 删除/app/view/layouts/中的引擎布局
  • 将您的 application_controller 更改为
    module EngineModule
    class ApplicationController < ::ApplicationController
    layout 'layouts/application'
    end
    end
  • 在您看来,如果您想引用任何路径,例如 login_path ,可通过main_app.login_path
  • 关于ruby-on-rails-3 - 应用程序布局中的渲染引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10615067/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com