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

我的场景是用户已经创建并输入到用户表中,但是现在用户想要:

  • 可能创建一个新餐厅,如果它不存在的话
  • 通过工作表创建用户和餐厅之间的链接,并
    • 可能同时在jobs表中创建昵称

我将在表单中使用嵌套模型来完成此操作,但是我目前删除了所有与此相关的代码。原因是我试图从 Restaurants_Controller 中创建记录,如您所见,它位于“链”的底部。仔细想想,这似乎是错误的。除了在工作模型中链接 user_id 之外,我可以让 rails 为所有事情做这件事。

无论如何,我认为我对 Rails 的理解并不高。保存上述内容的逻辑应该在哪里(作为一个人在表单上点击“提交”的结果)?

4

2 回答 2

1

可能创建一个新餐厅,如果它不存在的话

我认为这就是这里的关键。用户不一定要按照您想象的流程创建餐厅。她正在创建一份工作,我认为这部分是用户和餐厅之间的关系(它也有一些关于该用户在餐厅轮班的其他知识)。

从长远来看,我不清楚嵌套表单是否是正确的解决方案,但是根据您的描述,我正在想象用户转到作业/新视图,其中包含一个发布到作业的表单#create ,这会在该用户和餐厅之间建立关系。弄清楚 restaurant_id 的来源以及创建尚未持久化的餐厅的流程中的哪个位置似乎是接下来要弄清楚的事情。

于 2012-09-12T20:11:43.127 回答
0

我认为您应该为这些事情使用 rails 资源。Rails 资源为您提供不同字段的不同 url。在 config/routes.rb 中像这样使用它

resources :restaurent do
 resources :job 
end

这将为restuarent 和jobs 创建更新url,其中包含jobs。如果您不了解资源,请阅读 rails guide

于 2012-09-12T19:26:59.370 回答