`
lzqustc
  • 浏览: 206473 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

嵌套表单

阅读更多

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.newparams[:company] )

  @company.save

end

 

 

 

OK,我们看到上面只是非常简单的两句话,但是你会发现,执行@company.save时,除了执行insert  into  companies values (......),还会自动执行insert  into users  values (.....),从而实现一个表单的提交,同时操作两个数据库表。

神奇吧,赶快去试试^_^

 

参考资料:

 

<!--EndFragment-->

http://guides.rubyonrails.org/2_3_release_notes.html 

<!--EndFragment-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics