これはルビー/レールで私に起こった最も奇妙なことです。オブジェクトがロードされない
私はモデルを持っています。これは、残高です。そして、私は店の通貨に基づいてデフォルトのバランスを与える方法を持っています。
ストアモデル。
class Store < ActiveRecord::Base
has_many :balances, as: :balanceable, dependent: :destroy
def default_balance
#puts self.inspect <- weird part.
balances.where(currency: self.currency)[0]
end
...
end
収支モデル。
class Balance < ActiveRecord::Base
belongs_to :balanceable, :polymorphic => true
...
end
[OK]を、は作用を示すので、その後のバランスコントローラに私が持っている、それは私の特定のバランスやデフォルトのものを提供します。
バランスコントローラ。奇妙な部分が出番私はshowアクションへの呼び出しを行う場合は今ここに
class Api::Stores::BalancesController < Api::Stores::BaseController
before_filter :load_store
# Returns a specific alert
# +URL+:: GET /api/stores/:store_id/balances/:id
def show
#puts @store.inspect <- weird part.
@balance = (params[:id] == "default") ? @store.default_balance : Balance.find(params[:id])
respond_with @balance, :api_template => :default
end
...
private
# Provides a shortcut to access the current store
def load_store
@store = Store.find(params[:store_id])
authorize! :manage, @store
end
end
は...
です。例えば:
GET/API /記憶/ 148 /バランス/デフォルト
(通貨がヌルに設定されたため、ヌル通貨とはバランスが存在しない)、これはnullを返す、および生成されたSQLクエリは次のとおりです。
SELECT `balances`.* FROM `balances` WHERE `balances`.`balanceable_id` = 148 AND `balances`.`balanceable_type` = 'Store' AND `balances`.`currency` IS NULL
それはNULLとして通貨を設定している理由...だから私は知りません。そのプロセスにおける任意の場所で、私は置けばしかしは
は
またはdefault_balance
メソッド内store.inspect @置く:
がself.inspectを置く
それは魔法のように動作します!!!
私はなぜそれが起こっているのかわかりません... ... "inspect"とかそういうものまでストアオブジェクトがロードされていないようです。
ありがとうございました
'currency'はテーブルストアの列ですか? – Yanhao
はい、そうです。 'currency:string(255)' – esbanarango
クエリの前にオブジェクトをデバッグしようとします。 –