0

我正在构建一个为消费者和企业提供功能的应用程序。在创建我的模型时,我正在考虑让用户(消费者)和企业......每个企业也会有用户,但用户不一定属于一个企业。为了减少冗余,我会在用户中收集姓名、电子邮件等,在商业中收集特定的商业信息(地址、电话)。

class Business < ActiveRecord::Base
   belongs_to :user  
end

class User < ActiveRecord::Base
 has_one :business #only if business user, not consumer
end

这是配置所需关系的正确方法吗?

那么当需要进行商业注册时,是否有可能(以及如何)在我的业务对象首先出现的地方嵌套表单,然后是用户......所以我按这个顺序收集信息?我发现的所有示例/信息都显示了首先捕获用户信息的设置,然后是任何子模型。

在我的以下示例中,这是否正确:

<%= form_for(@business) do |f| %>
  #grab business info
<%= f.fields_for :user do |ff| %>
 #grab user info

感谢您的时间和帮助。

4

2 回答 2

0

您提到企业可能有多个用户,因此应该是:

class Business < ActiveRecord::Base
  has_many :users
end

然后用户将属于一个企业(可选)

class User < ActiveRecord::Base
  belongs_to :business
end

在您的表单中,您首先调用一个企业的表单:

form_for @business do |business_form|

然后您可以编辑企业用户:

business_form.fields_for :users do |user_form|

如果您正在创建的新业务还没有任何用户,您可以在控制器中为该业务构建任意数量的用户,以便用户子表单具有可使用的对象。在您的控制器中:

5.times do
  @business.users.build
end

以上将为该业务产生 5 个新的用户子表单。

于 2012-09-06T13:33:26.737 回答
0

你需要有

 class Business < ActiveRecord::Base
  belongs_to :user  
 end

 class User < ActiveRecord::Base
  has_one :business #only if business user, not consumer
  attr_accessible :business_attributes
  accepts_nested_attributes_for :business
 end

和形式应该是

 <%= form_for(@user) do |f| %>
  #grab user info
 <%= f.fields_for :business_attributes do |ff| %>
  #grab business info

然后在 update 方法中使用 update_attributes 来更新用户

于 2012-09-06T13:34:33.267 回答