class Company < ActiveRecord::Base
has_many :users #注意这里是has_many
has_one :newuser #注意这里是has_one
accepts_nested_attributes_for :newuser
....................
end
通常B2B门户网站在用户注册(:controller=> :users)时,都要求填写一些公司信息,所以要使用嵌套表单,如下:
- form_for :company, :url => users_path do |f| 注意form_for :company与:url => users_path 的不一致性
%fieldset
%p
= f.label :name, '公司名称'
= f.text_field :name
%p
= f.label :trade, '公司类型'
= f.text_field :trade
%p
= f.label :webaddress, '公司网址'
= f.text_field :webaddress
%fieldset
- f.fields_for :newuser_attributes do |user_form| (#关键就在这里了)
%p
%label{:for => 'email'} 电子邮箱
= user_form.text_field :email
%p
%label{:for => 'login'} 用户名称
= user_form.text_field :login
%p
%label{:for => 'password'} 用户密码
= user_form.password_field :password
%p
%label{:for => 'password_confirmation'} 重复密码
= user_form.password_field :password_confirmation
%p
%p
= f.submit "注册"
接着就应该在User_controller下的create方法里,保存Company、User信息,如下:
def create
@company = Company.new( params[:company] )
@company.save
end
OK,我们看到上面只是非常简单的两句话,但是你会发现,执行@company.save时,除了执行insert into companies values (......),还会自动执行insert into users values (.....),从而实现一个表单的提交,同时操作两个数据库表。
神奇吧,赶快去试试^_^
参考资料: