【问题标题】:Rails Nested Resource not creating from ArrayRails 嵌套资源未从数组创建
【发布时间】:2015-12-28 22:33:14
【问题描述】:

我正在尝试从 yahoo Finance gem 创建一个简单的数据提取器。我有一个嵌套的安全路由设置 has_many Price

价格控制器如下:

class PricesController < ApplicationController
  before_action :set_security
  before_action :set_price, only: [:show, :edit, :update, :destroy]

  def new
    @price = Price.new
  end

  private
  def set_price
    @price = Price.find_by_name(params[:id])
  end

  def price_params
    params.require(:price).permit(:date, :open, :high, :low, :close, :volume, :security_id)
  end

  def set_security
    @security = Security.find_by_ticker(params[:security_id])
  end
end

嵌套路由可以很好地从表单手动创建子价格记录。我正在尝试为从以下代码生成的数组中的每个结果创建价格记录:

class Datapuller

  def self.download_historical
    yahoo_client = YahooFinance::Client.new
    data = yahoo_client.historical_quotes("FB")

    data.each do |i|
      @ticker = Security.find_by_ticker(data[0].symbol )
      price = @ticker.prices.new()
      price.security_id = @ticker
      price.date = data[0].date
      price.open = data[0].open
      price.high = data[0].high
      price.low = data[0].low
      price.close = data[0].close
     end
   end
 end

我想从按钮链接调用此方法,但现在我在安全视图上有以下代码:

<%= Datapuller.download_historical %>

这也让我可以看到从数组中加载的数据。

使用上面的代码,我可以使用表单为父 Security 创建一个子 Price,然后我可以从 yahoo Finance gem 进行调用。但是,数组不会为数组中的每一行创建价格记录。

我错过了什么?

谢谢!

【问题讨论】:

    标签: ruby-on-rails arrays ruby nested-routes


    【解决方案1】:

    您没有在@ticker.prices 数组中保存任何内容的主要原因是您通过price = @ticker.prices.new() 实例化它们,但您从未保存它们。设置完所有属性后,需要调用如下:

    price.save
    

    获取该记录

    1. 通过 Active Record 和
    2. 保存
    3. 与您的@ticker 相关联。

    如果您浏览Active Record basics guide,它将有助于了解记录的生命周期(保存、验证、删除等)。

    您可能还想考虑让您的视图和路由更多resourceful,这是 Rails 的默认设置。如果您在路由中使用resource :prices,Rails 将使用它的约定来帮助您。

    因此,例如,您的控制器上有一个 create 方法,该方法仅负责调用您的 Datapuller.download_historical - 这样您就可以通过说 @987654331 来创建一个链接到该路由的按钮@ 这将在点击时创建您的价格。有更多方法可以进一步让 Rails 帮助您编写更少的代码,但这只是一个开始。如果您想阅读更多内容,我认为 M. Hartl 在他的介绍指南中很好地解释了RESTful resources。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多