私はタイムトラッカーを構築しています。この顧客からの開始時間、終了時間、顧客およびプロジェクトでタイムスタンプを作成することができます。プロジェクトや顧客にどれだけの時間を費やしたかを知ることができます。Railsと "has_one"の関係。プロジェクトを顧客に割り当てます(タイムスタンプ)
"has_many"のテーブル間の関係は完全に動作しますが、 "has_one"関係に問題があります。
マイテーブル:
timestamps customers projects
---------- ------------ -----------
id:integer id:integer id:integer
desc:string customer_name:string project_name:string
customer_id:interger project_id:integer
マイモデル:
timestamp.rb
class Timestamp < ActiveRecord::Base
has_one :customer
has_one :project, through: :customer
end
customer.rb
class Customer < ActiveRecord::Base
belongs_to :timestamp
has_many :projects, dependent: :destroy
end
project.rb
class Project < ActiveRecord::Base
belongs_to :customer
end
私の目標:タイムスタンプからTimestamp.create({desc: "Something", customer_id: "1", project_id: "6"})
Timestamp.find(1).customer.project
マイ
- は、関連する顧客とのプロジェクトで1つのタイムスタンプを作成します。問題:
timestamp_idをプロジェクトテーブルに含めるとこの作業を行うことができますが、この方法では、新しいタイムスタンプを作成するときに、Railsはすべてのプロジェクトを特定のtimestamp_idで複製します。しかし私はタイムスタンプに1つのproject_idを割り当てたい。
FYI:私はMYSQLデータベースでrails 4.2.6を使用しています。
あなたのtimestamp.rbで 'has_many:projects、through::customer'であってはなりませんか? 1人の顧客に多くのプロジェクトがあるためです。意図的にhas_oneを使用すると、リストから最初のプロジェクトのみがフェッチされます –
あなたの権利があります。しかし、これは問題を解決しません。でもありがとう! –
あなたのアプリで 'Timestamp'とは何ですか?その目的は何ですか?また、Active Recordタイムスタンプとはどのように違いますか?これはXYの問題のような臭いがあり、機能不全のソリューションを機能コードに変えてしまっているからです。おそらくもっと良い方法があります。 – Substantial