我有一个带有以下场景的项目
三个对象:
客户:真实客户端
用户:谁使用门户网站
部门:用户工作的客户(XYZ.com,ABC.com)
注册页面包含:FirstName,用户名,密码,ClientName,电子邮件
客户端只有一个字段值:客户端名称 FirstName,用户名,密码,ClientName,电子邮件属于用户
现在我想要的是创建一个使用ClientName作为部门名称的部门,并将用户与部门的ID相关联。 用户有一个字段department_id
答案 0 :(得分:1)
即使你的重新制定,仍然不清楚。所以我会按照自己的解释。另外,您没有指定是否使用Mongoid或ActiveRecord。我会选择Mongoid风格,因为它可以产生干净的模型,但可以随意更换ActiveRecord。
模型
class User
has_one :department
has_one :client
accepts_nested_attributes_for :client
accepts_nested_attributes_for :department
field :first_name
field :password
field :username
field :email
class Client
belongs_to :user
field :name
class Department
belongs_to :user
field :name
your_controller.rb
def new
@user = User.new
@user.client = Client.new
@user.department = Department.new
end
def create
if @user = User.create(user_params)
redirect_to @user
else
render 'new'
end
end
private
def user_params
# Set department.name as client.name
if params[:user] and params[:user][:department] and params[:user][:client]
params[:user][:department][:name] = params[:user][:client][:name]
end
params.require[:user].permit(
:first_name, :password, :username, :email,
client_attributes: [:id, :name],
department_attributes: [:id, :name]
)
end
_form.html.erb
<%= form_for :user do |user| %>
<%= user.text_field(:name) %>
...
<%= user.fields_for :client do |client| %>
<%= client.text_field(:name) %>
<% end %>
<%= user.fields_for :department do |department| %>
<p class="text-info">A department will be created with the same name as the client</p>
<% end %>
<% end %>