レールとその関係がビルダーをどのように照会するか、具体的にはキャメルケースが関連する呼び出しのためにどのように変換されるかについて質問があります。
関連コード
class CustomerPlan < ActiveRecord::Base
attr_accessible :customer_id, :plan_id, :startDate, :user_id
has_many :planActions
end
class PlanAction < ActiveRecord::Base
attr_accessible :actionType_id, :customerPlan_id, :notes, :timeSpent
belongs_to :customerPlan
belongs_to :actionType
end
ゲッターとセッターplan_action.actionType.name
は、関連するモデルから正しくプルするなど、問題なく機能します。ただしcustomer_plan.planActions.each
、エラーが返されます。
SQLite3::SQLException: no such column: plan_actions.customer_plan_id:
SELECT "plan_actions".*
FROM "plan_actions"
WHERE "plan_actions"."customer_plan_id" = 1
列はデータベースで次のように定義されていますがcustomerPlan_id
、これを使用するのは間違っていましたか?それは他のすべての呼び出しで機能し、他のすべての関係は正常に機能します。PlanAction->CustomerPlanですら。
私はすべてのドキュメントに目を通し、私が知っている他のすべてのソースについて検索しました。列を変更するのは簡単です。ここで何が起こっているのかを知りたいだけです。
お時間をいただきありがとうございます!
これに対する簡単な修正は、foreign_keyを明示的に設定することです。
has_many :planActions, :foreign_key => "customerPlan_id", :class_name => "PlanAction"
それでも、どこかでモデルの命名規則が欠落していると思います。何を理解できないようです。