Ruby on rails 如何为注册表单创建表单标签,它将表单数据保存在rails中的两个不同表中
因为这是一个基本问题,但我很困惑,因为我必须创建一个注册表单,它必须将数据保存在两个不同的表中,如 1) 沙龙2)用户 我有像企业名称地址url这样的沙龙数据,所有这些字段都应该保存在沙龙表中 电子邮件、密码和地址应保存在用户表中。 如何以良好的方式做到这一点 我的视图源代码是这样的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! %>
<%= 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 |%>
用户
和沙龙
之间的关系是什么?