3

私が使用している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 をより高いレベルで理解していないと思います。上記を保存するためのロジックはどこにあるべきですか(フォームで「送信」を押した結果として)?

4

2 に答える 2

1

まだ存在しない場合は、新しいレストランを作成する可能性があります

ここが鍵だと思います。あなたが思い描いている流れで、ユーザーがレストランを作っているとは限りません彼女はジョブを作成していますが、これはユーザーとレストランの間の関係の一部であると考えています (レストランでのユーザーのシフトに関する他の知識も持っています)。

ネストされたフォームがここで長期的に正しい解決策であることは明らかではありませんが、あなたが説明したことから、ユーザーがjobs#createに投稿するフォームを含むjobs/newビューに行くことを想像しています、そのユーザーとレストランの間の関係を作成します。restaurant_id がどこから来て、まだ永続化されていないレストランを作成するフローのどこにあるかを理解することが、次のことのようです。

于 2012-09-12T20:11:43.127 に答える
0

これらには Rails リソースを使用する必要があると思います。Rails リソースは、フィールドごとに異なる URL を提供します。config/routes.rb でこのように使用します

resources :restaurent do
 resources :job 
end

これにより、レストランとジョブの更新 URL が作成され、ジョブがネストされます。リソースがわからない場合は、Rails ガイドを読んでください。

于 2012-09-12T19:26:59.370 に答える