【发布时间】:2021-09-02 19:41:26
【问题描述】:
我在这里的嵌套字段有一些问题。我在其他视图/控制器中使用嵌套字段没有问题。
我正在尝试将角色表中的角色关联到用户表。
我的榜样是这样的:
class Role < ApplicationRecord
has_many :users
end
我的用户模型有这个:
class User < ApplicationRecord
belongs_to :role, optional: true
accepts_nested_attributes_for :role
...
之所以设置为可选,是因为当前用户还没有角色,我需要先将其应用到那些用户(目前只有两个用户在生产中,所以没关系)
我的用户控制器对于允许的属性和更新是这样的
class Admin::UsersController < ApplicationController
before_action :set_user, only: [:edit, :update, :destroy]
...
def edit
end
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to admin_users_url, notice: 'User Account was successfully updated.' }
else
format.html { render :edit }
end
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password, roles_attributes: [:name])
end
def set_user
@user = User.find(params[:id])
end
end
以及更新用户角色的表单:
.container.p-4
%h1 Edit User Information
= form_for([:admin, @user]) do |f|
- if @user.errors.any?
#error_explanation
%h2
= pluralize(@user.errors.count, "error")
prohibited this event from being saved:
%ul
- @user.errors.each do |error|
%li= error.full_message
.row.mb-4
.col
= f.label :first_name, "First Name"
= f.text_field :first_name, class: "form-control border border-dark"
.col
= f.label :last_name, "Last Name"
= f.text_field :last_name, class: "form-control border border-dark"
.form-group.mb-4
= f.label :email, "Email Address"
= f.email_field :email, class: "form-control border border-dark"
%h2 User Role
.form-group.mb-4
= f.fields_for :roles do |f|
= f.check_box :name, checked: false, value: "admin"
= f.label :name, "Admin"
.form-group.p-4.text-center
= f.submit
当我在检查“管理员”后点击更新时,终端读数是 :roles 是不允许的。
我有一个单独的角色控制器,允许我定义将用户关联到的角色。 Roles 表只有 name:string 和 user:references。
所以我不确定为什么不允许这样做。
【问题讨论】:
标签: ruby-on-rails