gpt4 book ai didi

ruby-on-rails - 在安装的 rails 引擎中扩展模型的功能

转载 作者:行者123 更新时间:2023-12-05 01:06:59 25 4
gpt4 key购买 nike

更新 3:

这个解决方案看起来很丑,但我将装饰器移回装饰器目录,然后将其添加到我的应用程序 Controller 中:

require './app/decorators/models/monologue/post_decorator.rb'
include ExtendPost
require './app/decorators/controllers/monologue/admin/posts_controller_decorator.rb'
include ExtendAdminPostsController

关于如何正确执行此操作的想法?谢谢。

但至少这是有效的。

更新 2:

那么下面的工作,但有人可以解释如何将此代码放在“正确”的地方,而不是我把它卡住的地方:

在我的 main_app 中的 application_controller.rb 中,我现在有:
class ApplicationController < ActionController::Base 

end

Monologue::PostsRevision.class_eval do
validates :title, :length => {:maximum => 25}
end

这工作正常,但从组织/代码可读性的角度来看,这是一个糟糕的位置。

更新:

我还根据 SO 答案尝试了一些不同的东西 here并最终得到了这段代码,它也不起作用:

在 app/models/post_revision.rb (同样,在 main_app 的 app 文件夹中)
require Monologue::PostRevisions::Engine.config.root + 'app' + 'models' + 'page'
class PostRevision
validates :title, :length => {:maximum => 25}
end

这也不起作用。

当尝试使用装饰器和 class_eval 方法修改 Rails 3 中已安装引擎的功能时,装饰器应该放在 main_app 的 app 文件夹中还是引擎的 app 文件夹中?

我正在尝试修改我得到的名为 Monologue 的引擎中的一些模型 here .我在不同产品(炼油厂)的网站上找到了关于如何做到这一点的很好的解释 here .而且我也按照此 Rails Guide 的说明进行操作.

所以我最终得到的代码是:

在 lib/monologue/engine.rb (这应该在主应用程序或引擎的 lib 文件夹中吗?我把它放在我的 main_app 的 lib 文件夹中):
module Monologue
class Engine < ::Rails::Engine
isolate_namespace Monologue

config.to_prepare do
Dir.glob(Rails.root + "app/decorators/**/*_decorator*.rb").each do |c|
require_dependency(c)
end
end
end
end

在 app/decorators/monologue/posts_revisions_decorator.rb 中(同样,我把它放在 main_app 的 app 文件夹中,而不是 Monologue 引擎的 app 文件夹中):
Monologue::PostsRevision.class_eval do
validates :title, :length => {:maximum => 25}
end

但这不起作用。额外的验证什么都不做。

如果这是因为它应该在 Monologue 挂载引擎的文件夹中而不是 main_app 中,那么我不知道该怎么做,因为这些文件不在我的 main_app 目录中。

想法?谢谢。

最佳答案

通过在初始化程序中通过 to_prepare 加载我的装饰器,我能够克服类似的挑战。尝试这样的事情:

# /config/initializers/my_engine.rb
Rails.application.config.to_prepare do
require_dependency("./app/decorators/models/my_engine/my_model_decorator.rb")
end

关于ruby-on-rails - 在安装的 rails 引擎中扩展模型的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19330468/

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