0

我对 Rails 不是很有经验,但我之前已经在几个应用程序中使用过它。这个应用程序是不同的,因为我想将一个 ruby​​ 脚本移植到一个 rails 应用程序并且我遇到了几个问题,我很确定我会以错误的方式去做,所以想问一些建议。

该脚本生成一些方程式,我希望控制器只调用一个助手(或其他东西)来使用我的脚本生成方程式列表,然后将它们作为 JSON 或我可以在视图中使用 JS 玩弄的东西传递。我尝试简单地将脚本文件复制到 helpers 文件夹,但是当我尝试通过我在控制器中创建的新路由来初始化它们时,它给出了这个错误:NameError(未初始化的常量 UsersController::EquationSettings)。我认为它可能期望我的模型包含所有这些对象。

代码片段:

新的控制器动作在 users_controller 中(它现在有自己的路由 - 希望它只是将 equation_list 和用户传递到我将处理所有显示的视图):

def list_equations
    @user = User.find(params[:id])

    equation_settings = EquationSettings.new 10
    equation_list_generator = EquationList.new equation_settings
    @equation_list = equation_list_generator.generate

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user, json: @equation_list }
    end
  end

文件夹结构: app/controllers/users_controller.rb(上面提到的控制器)app/helpers/equation_helpers/(这里有EquationSettings和EquationList rb文件)

一旦这个 @equation_list 被传递给视图,我只想能够像访问任何其他 JSON 哈希一样访问它。对任何建议都持开放态度,如果我似乎完全以错误的方式去做这件事,请尝试为我指明正确的方向。感谢所有读者的时间,

——安东尼

4

1 回答 1

2

根据您的代码片段猜测,您可能需要更改方法。一些建议/指针:

  1. 看起来您正在尝试使用帮助程序,但在 Rails 中,帮助程序应该是模块,而不是实例化,而是简单地在视图中使用它们的方法。例如,app/helpers/stark_helper.rb你会想要:

    module StarkHelper
      def use_honor
        # winter is coming
      end
    end
    

    这将use_honor在您看来可用。

  2. 辅助方法自动在视图中可用,但在控制器中不可用。要在控制器中使用辅助方法(不推荐;这样做会违反 MVC 模式,您需要在控制器类中显式包含辅助方法,例如:

    class BaratheonController < ApplicationController
      include BaratheonHelper
    
      # stuff
    end
    
  3. 在自动加载项目文件时,例如帮助程序,Rails期望文件夹结构和文件名反映其中定义的模块和类的名称。例如,如果在app/helpers/lannister.rb中定义了module LannisterHelper; ,Rails 将不会加载您的文件。您需要将该文件名更改为lannister_helper.rb. ( lannister_helper.rb-> LannisterHelper)

  4. 我提到的自动加载的另一个重要方面是子文件夹应该反映子类和子模块。因此,如果您有app/helpers/greyjoy_helper/greyjoy_boat_names.rb,该文件将需要具有以下定义:

    module GreyjoyHelper
      module GreyjoyBoatNames
        # stuff
      end
    end
    
于 2012-10-14T00:18:22.823 回答