Ruby-on-rails使用控制器中的缓存来跟踪数据库更新的信息

时间:2014-05-01 01:44:40

标签: ruby-on-rails caching

表“公司”有一个关联的表“公司列表”,以便公司拥有__很多公司_Listings。当从公司索引页面中选择s公司时,将显示允许插入/修改/删除该公司的所有Company_Listings的页面。 (1)本公司写入缓存 (2)控制权转移到Company_Listings页面 (3)显示所有相关的company_listings
(3)如果输入更新或输入新的company_listing,则Company_Listings Controller读取公司缓存并使用它来确定公司ID (4)我从未在开发中遇到任何错误,但我偶尔会在Heroku上遇到错误,这些错误似乎是由于缓存的公司信息丢失造成的。

问题 (1)这是这样做的方式,还是应该将公司ID嵌入到路线中 (2)为什么我只在Heroku而不是开发环境中得到这个错误?

模型

class Company < ActiveRecord::Base
  include ActiveModel::ForbiddenAttributesProtection
  has_many :company_listings, dependent: :destroy

class CompanyListing < ActiveRecord::Base
  include ActiveModel::ForbiddenAttributesProtection 
  belongs_to :company

控制器

class CompaniesController < ApplicationController
  ...
   def update
   Rails.cache.write("company", @company)
   ...

class CompanyListingsController < ApplicationController 
  def new_option
     @company = Rails.cache.read("company")
     @company_listing = CompanyListing.new
     @company_listing.company_id = @company.id
  end  

路线

resources :companies, only: [:destroy, :update]
resources :company_listings, only: [:new, :create, :edit, :destroy] do
    collection do
      get 'edit_multiple'
      post 'update_multiple'
    end
 end

问题 (1)这是这样做的方式,还是应该将公司ID嵌入到路线中 (2)为什么我只在Heroku而不是开发环境中得到这个错误?

路由 如果编辑公司 http://quiet-fortress-3338.herokuapp.com/company_listings/112/edit 公司id = 112

的地方

路由应该是地址是这样的 http://quiet-fortress-3338.herokuapp.com/company/222/edit/company_listing/edit_multiple/

任何帮助/建议都会非常感激 - 谢谢 - 皮埃尔

1 个答案:

答案 0 :(得分:1)

我终于找到了导致Heroku错误的原因。我在CompanyListing模型中添加了验证。然后这引起了一些误导性的Heroku错误Heroku&#34;缺少公司ID&#34;。 因此,出于某种奇怪的原因,缓存内存被覆盖的情况并非如此。谢谢 - 皮埃尔