私が使用している3つのモデルは次のとおりです。
ユーザー.rb:
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# remember_token :string(255)
# password_digest :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_many :jobs
has_many :restaurants, :through => :jobs
end
ジョブ.rb
# == Schema Information
#
# Table name: jobs
#
# id :integer not null, primary key
# restaurant_id :integer
# shortname :string(255)
# user_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
class Job < ActiveRecord::Base
attr_accessible :restaurant_id, :shortname, :user_id
belongs_to :user
belongs_to :restaurant
has_many :shifts
end
レストラン.rb:
# == Schema Information
#
# Table name: restaurants
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class Restaurant < ActiveRecord::Base
attr_accessible :name
has_many :jobs
has_many :users, :through => :jobs
has_many :positions
end
私のシナリオは、ユーザーが既に作成されてユーザーテーブルに入力されているということですが、ユーザーは次のことを望んでいます。
- まだ存在しない場合は、新しいレストランを作成する可能性があります
- ジョブテーブルを介してユーザーとレストラン間のリンクを作成し、
- おそらく同時にジョブテーブルにニックネームを作成します
これを達成するためにフォームでネストされたモデルを使用しますが、現時点ではそれに関連するすべてのコードを削除しました。その理由は、ご覧のとおり、「チェーン」の一番下にある Restaurant_Controller 内からレコードを作成しようとしていたからです。考えてみれば、これは間違っているように思えます。ジョブモデルで user_id をリンクすることを除いて、レールにすべての魔法を実行させることができました。
とにかく、私は Rails をより高いレベルで理解していないと思います。上記を保存するためのロジックはどこにあるべきですか(フォームで「送信」を押した結果として)?