Ruby on rails 如何为注册表单创建表单标签,它将表单数据保存在rails中的两个不同表中

Ruby on rails 如何为注册表单创建表单标签,它将表单数据保存在rails中的两个不同表中,ruby-on-rails,ruby,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3.2,因为这是一个基本问题,但我很困惑,因为我必须创建一个注册表单,它必须将数据保存在两个不同的表中,如 1) 沙龙2)用户 我有像企业名称地址url这样的沙龙数据,所有这些字段都应该保存在沙龙表中 电子邮件、密码和地址应保存在用户表中。 如何以良好的方式做到这一点 我的视图源代码是这样的 <%= form_tag users_path(@users), :method => :post do |f| %> <%= devise_error_messages! %>

因为这是一个基本问题,但我很困惑,因为我必须创建一个注册表单,它必须将数据保存在两个不同的表中,如 1) 沙龙2)用户 我有像企业名称地址url这样的沙龙数据,所有这些字段都应该保存在沙龙表中 电子邮件、密码和地址应保存在用户表中。 如何以良好的方式做到这一点

我的视图源代码是这样的

<%= form_tag users_path(@users), :method => :post do |f| %>


<%= devise_error_messages! %>

  <div><%=  label_tag :business_name %><br />
  <%= text_field_tag :business_name %></div

  <div><%=  label_tag :website_url %><br />
  https://<%= text_field_tag :website %></div>

  <div><%=  label_tag :business_adress %><br />
  <%= text_field_tag :business_adress %></div>


  <div><%=  label_tag :owners_name %><br />
  <%= text_field_tag :name %></div>

  <div><%=  label_tag :phone_number %><br />
  <%= text_field_tag :phone_number %></div>

  <div><%=  label_tag :email %><br />
  <%= email_field_tag :email %></div>

  <div><%= label_tag :password %><br />
  <%= password_field_tag :password %></div>

  <div><%= label_tag :password_confirmation %><br />
  <%= password_field_tag :password_confirmation %></div>

  <div><%= submit_tag "Sign up" %></div>
<% end %>
:post do | f |%>


在控制器用户中,控制器将如下所示:-
rails 4具有强参数

class UsersController < ApplicationController
 def create
   @user = User.create!(user_params)
   @user.salons.create!(salon_params)
 end

private
 def user_params
    params.require(:user).permit!(:name,:phone,:email, :password) #permit those parameters which you required 
 end
 def salon_params
   params.permit!(:business_name, :website, :business_adress) 
 end 
end
class UsersController
模型中

class User < ActiveRecord::Base           
     has_many :salons        
  end   
class用户

谢谢,希望对您有所帮助。

首先,您需要在两个模型之间创建关联,请检查此项以了解rails关联

创建模型之间的关联后,请签出此项以了解嵌套属性,这样可以通过父项将属性保存在关联记录上

例如

类用户
  has_many :salons, :dependent =>:destroy   

  accepts_nested_attributes_for :salons 
结束

班级沙龙
  has_many :salons, :dependent =>:destroy   

  accepts_nested_attributes_for :salons 
属于:用户

结束

然后在你的用户控制器的新动作中,你需要像这样建立沙龙

@user=user.new

@user.salones.build

然后在您的用户表单中,您可以像这样从用户那里获得沙龙的价值

<%= form_tag users_path(@users), :method => :post do |f| %>


<%= devise_error_messages! %>

  <div><%=  label_tag :business_name %><br />
  <%= text_field_tag :business_name %></div

  <div><%=  label_tag :website_url %><br />
  https://<%= text_field_tag :website %></div>

  <div><%=  label_tag :business_adress %><br />
  <%= text_field_tag :business_adress %></div>


  <div><%=  label_tag :owners_name %><br />
  <%= text_field_tag :name %></div>

  <div><%=  label_tag :phone_number %><br />
  <%= text_field_tag :phone_number %></div>

  <div><%=  label_tag :email %><br />
  <%= email_field_tag :email %></div>

  <div><%= label_tag :password %><br />
  <%= password_field_tag :password %></div>

  <div><%= label_tag :password_confirmation %><br />
  <%= password_field_tag :password_confirmation %></div>

  <div><%= submit_tag "Sign up" %></div>
<% end %>

...
...

假设您使用的是Desive as authentication解决方案,并且已经建立了它们之间的关系,那么您可能希望了解接受的答案基本上是:

  • 在rails应用程序的目录中运行
    rails generate Desive:views
    ,以提取Desive注册表单,并在表单中插入以下修改
  • 修改提取的表单(app/views/designe/registrations/new.html.erb)以预先创建一个空沙龙(
    resource.build\u salon
  • 不要将沙龙模型的表单字段放置在主周围的
    form_中,而是使用
    fields_为:salon do|s
  • 然后将属于您的沙龙模型的所有表单字段放置到该块中,使其看起来像这样

    <%= form_tag users_path(@users), :method => :post do |f| %>
    
    <%= devise_error_messages! %>
    
     <%= f.fields_for :salon do |s| %>
       <div><%= s.label :business_name %><br />
       <%= s.text_field :business_name %></div
    
       <div><%= s.label :website_url %><br />
       https://<%= s.text_field :website %></div>
    
     <% end %>
    
     <div><%=  label_tag :email %><br />
     <%= email_field_tag :email %></div>
    
     <div><%= label_tag :password %><br />
     <%= password_field_tag :password %></div>
    
     <div><%= label_tag :password_confirmation %><br />
     <%= password_field_tag :password_confirmation %></div>
    
     <div><%= submit_tag "Sign up" %></div>
    <% end %>
    
    :post do | f |%>
    

    用户
    沙龙
    之间的关系是什么?