Asocjacja belongs_to a zagnieżdżone atrybuty formularza

Cześć, sprawa jest następująca. Mam tabelę słownikową z grupami użytkowników. Potrzebuję użyć zagnieżdżonych atrybutów podczas tworzenia nowego usera, czyli mam selecta, wczytuję sobie dostępne grupy, wybieram i tworzy mi relację. No i tu się zaczynają schody, niby w paramsach dostaję nazwę z selecta, ale nie potrafi utworzyć relacji między użytkownikiem a grupą. Co robię źle? Czy powinienem w akcji create podstawić coś takiego, jak: @user.user_group = the_chosen_group?
Oto mój kod:

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

class UserGroup < ActiveRecord::Base
  has_many :users
end



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

def create
    @user = User.new(user_params)

    if @user.save
      # akcja
    else
      # akcja
    end
  end

  private

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


= simple_form_for @user do |f|
   = f.input :username
   = f.simple_fields_for :user_group do |builder|
      = builder.input :name, collection: UserGroup.all.map(&:name), prompt: "Choose one"
   = f.input :email
   = f.button :submit, 'Create', class: 'btn btn-success'

BTW, czy uważacie, że UserGroup to dobra nazwa? Czy lepiej użyć samo Group lub też użyć klucza obcego by było @user.group zamiast @user.user_group?

Pozdrawiam.

Jeżeli zadajesz takie pytanie, to domniemywać można, że dopiero uczysz się RoR. :wink:

Gdy stawiałem naprawdę te pierwsze kroki, to ułatwiało mi życie stosowanie nazw składających się z jednego wyrazu, który się też “dobrze” odmienia w liczbie mnogiej.

user -> users, person -> persons, itd.

Powodzenia :slight_smile:

Imo UserGroup jest ok, gdyż grup możesz mieć wiele różnych. Np. grupę produktów, grupę artykułów itp.
Użytkownikowi dajesz pole user_group_id:integer. Wystarczy Ci has_many: users i belongs_to: user_group.
Nie musisz dodawać accepts_nested_attributes_for. Jak się będziesz trzymał nazewnictwa narzuconego przez konwencję to ułatwi Ci pisanie. Oczywiście można mieszać i nazywać klucze obce user_group a nawet ajdi_grupy, tylko pamiętaj. w Rails jest przyjaźniej jeśli wyznajesz zasadę: Convention Over Configuration.

Oczywiście zastanów się czy niedługo nie będziesz chciał, aby użytkownik mógł należeć równocześnie do kilku grup. Ale to może jednak zostaw na później jak opanujesz podstawy.