【问题标题】:Getting values from Rails database to use in Ruby file从 Rails 数据库获取值以在 Ruby 文件中使用
【发布时间】:2016-12-19 14:45:31
【问题描述】:

我有一个页面,它在表单中接受用户输入并将其保存到 rails 中的数据库。我现在需要在我编写并放置在 /lib/ 中的 ruby​​ 应用程序中使用这些输入值,这将生成一些新值,我需要将这些值存储在另一个数据库中以将其返回到我页面上的元素。

我目前让 ruby​​ 应用程序从提示中获取值,然后使用 gets.chomp 方法,这只是一个占位符,直到我学习如何使用存储的值。

我是后端编程的新手,但这是我用来存储输入的控制器:

colours_controller.rb

class ColoursController < ApplicationController
  def home
    @colour = Colour.new
  end
  def create
    @colour = Colour.new(colour_params)
    if @colour.save
      redirect_to root_path
    else
      redirect_to root_path, notice: "Error."
    end
  end
  private
  def colour_params
    params.require(:colour).permit(:hue, :sat, :luma, :number)
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby database


    【解决方案1】:

    现在输入已存储在数据库中,您可以使用Colour.find... 或任何类似方法从应用程序中的任何位置轻松查询它们。

    但是,在使用lib 目录中的文件时,需要注意以下几点:

    1. 始终将 lib 目录中的所有文件添加到自动加载路径,例如 config.autoload_paths += [config.root.join('lib')]

    2. 对于以后要自动加载的新文件,请确保文件的名称和它包含的类/模块相同。这意味着如果文件名为lib/colour_paint.rb,则模块应为module ColourPaint; end

    【讨论】:

    • 对于 rails 5,使用 config.eager_load_paths
    【解决方案2】:

    您可以将它们作为参数传递:

    例如:假设在您的 ruby​​ 文件中,您有一个名为 foo 的类,其方法为 bar,它看起来像这样:

    Foo.rb

    class Foo
    
      def bar(colour)
        # do something
      end
    
    end
    

    在您的 ColoursController.rb 中

    def create
      @colour = Colour.new(colour_params)
      if @colour.save
        foo = Foo.new # instatiate an instance of the foo class
        foo.bar(@colour) # call the bar method and pass the colour variable
        redirect_to root_path
      else
        redirect_to root_path, notice: "Error."
      end
    end
    

    【讨论】:

    • color 是我控制器中的@colour?
    • 这就是您在 OP 中发布的内容
    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-02-13
    相关资源
    最近更新 更多