Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 关联属于表单中的vs嵌套属性_Ruby On Rails_Ruby On Rails 4_Associations_Simple Form - Fatal编程技术网

Ruby on rails 关联属于表单中的vs嵌套属性

Ruby on rails 关联属于表单中的vs嵌套属性,ruby-on-rails,ruby-on-rails-4,associations,simple-form,Ruby On Rails,Ruby On Rails 4,Associations,Simple Form,我的情况如下: class User < ActiveRecord::Base belongs_to :user_group accepts_nested_attributes_for :user_group end class UserGroup < ActiveRecord::Base has_many :users end 但它不会创建用户与用户组之间存在关联的用户。UserGroup表只是用户组的列表,例如主持人、用户等。因此,我需要在表单中选择一个组,并创建

我的情况如下:

class User < ActiveRecord::Base
  belongs_to :user_group
  accepts_nested_attributes_for :user_group
end

class UserGroup < ActiveRecord::Base
  has_many :users
end
但它不会创建用户与用户组之间存在关联的用户。UserGroup表只是用户组的列表,例如主持人、用户等。因此,我需要在表单中选择一个组,并创建一个具有关联的新用户。我做错了什么?我是否需要在
创建
操作中找到一个组,并将其作为
@user.user\u group=所选的组
传递

附言。 这是用户组的专有名称约定吗?也许我应该称之为团体


注意。

仅当您希望通过对象本身编辑关联对象时,才应使用嵌套属性。简而言之,每次提交创建的表单时,rails都会收到如下参数:

{ username: 'sth', user_group_attributes: { name: 'Group name' }
当您像这样分配属性时,rails将创建新的属性组,因为它不知道要搜索这样的组

因为您只想将给定的用户分配给usergrooup,所以根本不需要嵌套的_属性。您所需要的只是:

= simple_form_for @user do |f|
  = f.input :username
  = f.input :user_group_id, collection: UserGroup.all.pluck(:name, :id), prompt: 'Choose one'
  = f.input :email
  = f.button :submit, 'Create', class: 'btn btn-success'
在控制器中:

UsersController < ApplicationControler
  def new
    @user = User.new
    @user.build_user_group
  end

  def create
    @user = User.new(user_params)

    if @user.save
      # do something
    else
      # do something
    end
  end

  private

  def user_params
    params.require(:user).permit(:email, :username, user_group_attributes: [:name])
  end
end
def user_params
  params.require(:user).permit(:email, :username, :user_group_id)
end
def user_params
  params.require(:user).permit(:email, :username, :user_group_id)
end