【问题标题】:Rails: Not reloading engine's view path in developmentRails:在开发中不重新加载引擎的视图路径
【发布时间】:2014-08-22 11:21:18
【问题描述】:

我有一个使用引擎的 Rails 项目,在开发模式下工作时遇到问题。

每当我对项目中的某些内容进行更改时,应用程序都无法再找到引擎的视图。

 Missing template spree/api/credit_card_types/index, spree/api/base/index with {:locale=>[:es], :formats=>[:json], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :rabl], :versions=>[:v1]}. Searched in:
  * "/home/user/project/app/views"
  * "/home/user/.rvm/gems/ruby-2.1.0@project/bundler/gems/spree-ebda3354180a/api/app/views"

引擎的视图根目录没有出现在搜索路径中,但我不明白为什么。有什么想法吗?

我的 routes.rb(注意我没有安装我的引擎)

require 'resque/server'

Project::Application.routes.draw do

  resources :shipping_companies

  get 'signin', to: 'signin#signin'
  get 'register', to: 'register#register'

  scope '/frontend/api', module: :api do
    # ...
  end

  namespace :frontend do
  end

  Spree::Core::Engine.add_routes do
    # ...
  end

  # Custom Admin
  Spree::Core::Engine.add_routes do
    # ...
  end

  get '/faq/' => 'pages#show', id: 'faq'
  get '/privacy/' => 'pages#show', id: 'privacy'
  get '/terms/' => 'pages#show', id: 'terms'

  mount JasmineRails::Engine => '/specs' if defined?(JasmineRails)
  mount Resque::Server.new, :at => '/resque'
end

我引擎中的控制器(app/controllers/spree/api/credit_card_types_controller.rb

class Spree::Api::CreditCardTypesController < Spree::Api::BaseController

  def index
    @credit_card_types = SpreeDecidir::CreditCardType.all.select do |credit_card_type|
      credit_card_type.installment_plans.present?
    end.collect {|credit_card_type| SpreeDecidir::CreditCardTypePresenter.new credit_card_type}
    @amount = params[:amount].to_f if params[:amount]
  end
end

还有 RABL 视图(app/views/spree/api/credit_card_types/index.v1.rabl

object false
node(:count) { @credit_card_types.count }

child(@credit_card_types => :credit_card_types) do
  extends "spree/api/credit_card_types/show"
end

【问题讨论】:

  • 为您的引擎捆绑本地配置。我用过一次就这样刷新了。
  • 无论是否使用本地引擎,我们都有这个问题。

标签: ruby-on-rails actionview


【解决方案1】:

RABL 是宿主应用程序的依赖项还是引擎的依赖项?如果是后者,请记住加载其依赖项是引擎的责任。确保在其中require "rabl"

RABL 似乎对 rails 引擎有一些问题:https://github.com/nesquena/rabl/wiki/Setup-rabl-with-rails-engines

【讨论】:

    【解决方案2】:

    如果没有更多代码来作为我的答案的基础,我猜你错过了以下两件事之一:

    1) 您缺少视图(即 api/app/views/index.html.erb)

    2) 您缺少指向您的视图的重定向。某处,某事试图呈现一个动作,但它找不到相应的视图模板(因此缺少模板错误)。

    如果您需要更具体的回复,我建议您发布更多代码(如果您无法发布代码,请考虑发布经过净化的版本或创建您正在做的事情的简单再现)。

    【讨论】:

    • 1) 没有错过视图,第一次(不做任何更改)我启动服务器时,视图工作正常。 2)我认为问题在另一个方向上运行。由于某些代码更改,重新加载应用后视图路径指向不同的内容。
    • 当它坏了你会改变什么?
    • 任何使整个应用程序重新加载的东西。任何单个控制器或模型。
    • 好的,我认为问题在于您的 RABL 视图(可能)。你看过stackoverflow.com/questions/21368905/…吗?
    • 其实不是问题。
    猜你喜欢
    • 2010-12-24
    • 2015-09-12
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2011-09-30
    相关资源
    最近更新 更多