2012-09-06 150 views
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 

感謝您的時間和幫助。

回答

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_attributes更新方法來更新用戶

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個新的業務用戶子表單。