2017-07-31 58 views
0

我是Rails的新手。目前我正在開發Rails 5 API。將多個外鍵保存在一個模型屬性中

有兩種模式。

BLOCK 
block_name 
-------------------------------- 
EMPLOYEE 
name 
email 
block_ids (string) 

關係

Employee 
has_many: blocks 

Block 
belongs_to: user 

僱員控制塊。當用戶創建員工時,他必須指定該員工所控制的塊。

這是帖子請求的主體。

{ 
    "first_name":"John", 
    "last_name": "Smith", 
    "email": "[email protected]", 
    "block_ids": "9,5,3" 
} 

所以約翰史密斯控制的ID塊等於9,5和3.我想這種方法是不好的。

這是用戶控制器創建行動

def create 
    @user = current_organization.employees.build(user_params) 
    if @user.save! 
    render json: @user 
    else 
    head :unprocessable_entity 
    end 
end 

如何外鍵有效地存儲到多少塊?你會建議我什麼?

+0

你想讓一個塊只屬於一個用戶嗎?或者可以將一個塊與多個用戶關聯? –

+0

一個塊可以關聯到許多用戶 –

回答

1

如果您擁有1xn關係(一名員工有很多塊),則不應在員工上使用block_ids。您應該在block模型上使用employee_id。然後在block.rb上添加belongs_to :employee

但是,如果它是一個nxn關係(多對多),你必須創建另一種模式來做到這一點關係,就像EmployeeBlock,其中有employee_idblock_id。是這樣的:

class EmployeeBlock < ApplicationRecord 
    belongs_to :employee 
    belongs_to :block 
end 

,並在你的employee.rb,是這樣的:

has_many :employee_blocks 
has_many :blocks, through: employee_blocks 

,反之亦然爲block.rb。

UPDATE: 用於創建n×n的關係表,就可以生成模式是這樣的:

rails g model EmployeeBlock employee:references block:references 

這樣的話,它會創建表的外鍵和belongs_to的關係。

對於表格,對於您的情況,我認爲使用嵌套關聯爲您的用戶提供表單是合理的。這有點複雜,所以我建議看看這個例子,認爲它會說清楚: http://www.createdbypete.com/articles/working-with-nested-forms-and-a-many-to-many-association-in-rails-4/

+0

感謝羅南的答案。如果我使用nxn,那會更好。但是,我應該如何制定一個良好的崗位要求,以便了解哪些員工可以控制哪些方面? –

+0

我應該爲EmployeeBlock模型進行遷移嗎? –

+0

@ZhunissaliShanabek用更多的信息更新了這個問題。祝你好運! –