Belongs_to関係を持つモデルのデータベースに新しいエントリを追加しようとしています。 JobsとClientsの2つのモデルがあります。
これら2つの間の関連付けを設定する方法(has_manyとbelongs_toを使用)のチュートリアルを見つけるのは簡単でしたが、関連付けが実際に使用されている例は見つからないようです。
私のコードでは、最初のクライアント用に新しいジョブを作成しようとしています。ジョブモデルにはclient_idの属性があり、おそらく手動で属性を入力できることはわかっていますが、これを簡単に実行するには、いくつかのRuby規則が必要です。
Job.create(:client_id => 1, :subject => "Test", :description => "This is a test")
これは簡単にコードに入れることができますが、Rubyの方が良い方法だと思います。これが、モデルのセットアップ方法です。
class Job < ActiveRecord::Base
attr_accessible :actual_time, :assigned_at, :client_id, :completed_at, :estimated_time, :location, :responded_at, :runner_id, :status, :subject, :description
belongs_to :client
end
class Client < User
has_many :jobs
end
class User < ActiveRecord::Base
attr_accessible :name, :cell, :email, :pref
end
クライアントのcreate
コレクションでjobs
を呼び出すだけです。
c = Client.find(1)
c.jobs.create(:subject => "Test", :description => "This is a test")
オブジェクトを引数として渡して、ジョブを作成できます。
client = Client.create
job = Job.create(client_id: client.id, subject: 'Test', description: 'blabla')
create
メソッドは、オブジェクトの保存が無効な場合(必須名などの検証を設定した場合)にエラーを発生させます。
IDを渡す代わりに、オブジェクト自体を引数として渡します。つまり、:client_id => 1
または:client_id => client.id
を渡す代わりに、:client => client
を渡します。
client = Client.find(1)
Job.create(:client => client, :subject => "Test", :description => "This is a test")
_create_job
_は次のように使用できます。
_client = Client.create
job = client.create_job!(subject: 'Test', description: 'blabla')
_
_belongs_to
_アソシエーションを宣言すると、宣言するクラスは、アソシエーションに関連する5つのメソッドを自動的に取得します。
_association
association=(associate)
build_association(attributes = {})
create_association(attributes = {})
create_association!(attributes = {})
_
これらすべてのメソッドで、関連付けは_belongs_to
_に最初の引数として渡された記号に置き換えられます。
詳細: http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference