我有两个模型:User
和Role
。用户属性为:
name:string
email:string
admin:boolean
role_id:integer
角色属性为:
designer:boolean
developer:boolean
我设置的关联是用户belongs_to
角色和角色has_many
用户。当用户注册时,我希望他选择自己的职位(设计师或开发人员)。然而,当我想显示可供选择的职位(设计师和开发人员)时,我会将role_id
作为Integer字段。有人能帮我吗?
您想要做的叫做"嵌套模型"。
首先,你必须告诉模型允许其他模型这样做:
# app/model/user.rb
class User < ActiveRecord::Base
belongs_to :role
accepts_nested_attributes_for :role
end
下一件事在你看来是
#app/views/users/new.html.ham
= simple_form_for @user do |f|
= f.input :name
= f.input :email
%br
= f.simple_fields_for :role do |role|
= role.input :designer
= role.input :developer
= f.button :submit, "Send Message", :class => 'btn btn-primary btn-block'
现在最后但最不重要的是,你可以接受控制器中的新参数
class UsersController < ApplicationController
expose(:users){User.all.order(:id)}
expose(:user, attributes: :user_params)
def new
@user = User.new
@user.role.build
end
def create
if user.save
flash[:notice] = t(:user_was_successfully_created)
redirect_to root_path
else
render :new
end
end
private
def user_params
params.require(:user).permit(
[
:email ,
:name ,
role_attributes: [
:designer,
:developer,
]
]
)
end
end
你可以查看一个示例应用程序https://github.com/mzaragoza/sample_nestes_forms
我希望这能有所帮助Happy Hacking