2016-01-30 4 views
0

У меня есть таблица пользователя и группы. В таблице пользователя у меня есть id, name. В таблице групп у меня есть id group_name, created_by, user_id. Здесь пользователь может принадлежать более чем к одной группе, но не к той же группе дважды. Группа может иметь много пользователей, но не одного и того же пользователя дважды.Вставка данных в столбец внешнего ключа

Вот мой код.

group.rb

module Client 
    class Group < ActiveRecord::Base 
    has_many :users 
    end 
end 

user.rb

class User < ActiveRecord::Base 
    belongs_to :client_groups 
end 

Теперь, когда пользователь создает новую группу, он должен автоматически сохраняться в user_id и CREATED_BY поле. Так согласно guides, я пытался следовать той же с моим кодом, как этот

@user.Client::Group.new(client_group_params) 

, но он дал мне ERR.

Так что я попробовал другой путь,

def create 
     @client_group = Client::Group.new(client_group_params) 
     client_group_params[:created_by] = current_user.id 
     client_group_params[:users_id] = current_user.id 
     @client_group.save 
     respond_with(@client_group) 
    end 

def client_group_params 
     params.require(:client_group).permit(:group_name) 
    end 

Он спас GROUP_NAME в БД, но это не спасло CREATED_BY и users_id поле. Есть идеи?

Я сделал поле user_id внешнего ключа.

+1

Написать как 'BELONGS_TO: client_groups, class_name:«Client :: Group'' и '@ user.build_client_groups (client_group_params)' –

+0

@ArupRakshit, я получил этот err' undefined метод «Клиент» для nil: NilClass'. Вот изменения, которые я сделал определение функции создания @client_group = @ user.Client :: Group.new (client_group_params) # client_group_params [: CREATED_BY] = current_user.id # client_group_params [: users_id] = current_user.id @ client_group.save reply_with (@client_group) end' –

+0

снова прочитайте мой комментарий. И вы делаете много неправильных вещей, внутри действия 'create'. –

ответ

2

Во-первых, вам нужно изменить объявление assoication, как показано ниже:

class User < ActiveRecord::Base 
    belongs_to :client_group, 
    class_name: 'Client::Group', 
    foreign_key: :group_id 
end 

Согласно ассоциации у вас есть, модель User должна иметь столбец, который называется group_id. Добавьте его через миграцию. Я не вижу смысла добавлять user_id в модель Group.

Затем измените create действие, как:

def create 
    @client_group = current_user.build_client_group(
    client_group_params.merge(created_by: current_user.id) 
    ) 
    @client_group.save 
    respond_with(@client_group) 
end 
+0

У меня снова есть err 'undefined method' build_client_groups 'для nil: NilClass' –

+0

@SushantBajracharya, поэтому ваш 'current_user' -' nil'. Вы используете 'Devise'? если не из того, откуда этот метод «current_user»? –

+0

Я напечатал это в методе создания 'render text: current_user.id', и я вернул свой идентификатор. –

Смежные вопросы