gpt4 book ai didi

ruby-on-rails-4 - rails Engine 中 View 中辅助方法的未定义方法错误

转载 作者:行者123 更新时间:2023-12-04 18:35:59 25 4
gpt4 key购买 nike

我面临以下问题:在我的应用程序中我使用引擎。假设我有一个商店引擎。在该商店引擎中,我有两个 Controller :carts_controller 和 products_controller 及其助手:carts_helper 和 products_helper。

现在在我的 views/shop/products/index.html.erb 上查看,我尝试调用 helpers/shop/carts_helper.rb 中定义的方法 cart_action .但是,不幸的是我得到了 undefined method `cart_action' for #<#<Class:0x007fb3627af090>:0x007fb3627aab08>当我这样做时。当我在 helpers/shop/products_helper.rb 中放置相同的方法时我没有收到此消息,但该方法工作正常....为什么我不能使用来自 carts_helper 的方法,但我可以使用来自 products_helper 的方法?在普通的 Rails 应用程序中,我可以在任何 View 上使用任何辅助方法,对吗?

它可能必须对命名空间做一些事情,即帮助文件不在 helpers 中。但在 helpers/shop然而this helps prevent conflicts with helpers from other engines or apps...

module Shop
module CartsHelper
def cart_action(package_id)
#some code
end
end
end

我如何在 shop/products/index.html.erb 上调用它:

<%= cart_action(package['id']) %>

这可能与我从主应用程序继承 applications_controller 的功能有关吗?:

class Shop::ApplicationController < ApplicationController
end

代替

module Shop
class ApplicationController < ActionController::Base
end
end

FWIW 这个引擎的路线看起来像:

Shop::Engine.routes.draw do
resources :products, only: [:index]
# shopping cart
resource :cart, only: [:show] do
put 'add/:package_id', to: 'carts#add', as: :add_to
put 'remove/:package_id', to: 'carts#remove', as: :remove_from
end

end

提前感谢您的帮助!

注意:我不想在我的主应用程序中使用我的辅助方法,而只是在同一引擎的另一个 View 中使用。

最佳答案

除了 ApplicationHelper 之外, View 只能访问特定于 View 的助手。由于这是您的产品相关 View ,因此只能访问 ApplicationHelper + ProductsHelper。因此解决方案是将此方法移至 ProductsHelper 或 ApplicationHelper。

关于ruby-on-rails-4 - rails Engine 中 View 中辅助方法的未定义方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29728173/

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