考慮兩個表表A和表B:外鍵沒有得到正確設置(即將爲空)
class TableA
has_many: TableBs
end
class TableB
has_many: TableAs
end
TableB中的控制器:以上
class TableBController < ApplicationController
def new
@tableB = TableB.new
end
def create
@tableB = TableB.new(tableB_params)
@tableB.save
end
def tableB_params
params.require(:tableB).permit(:tableAId, :date, :time)
end
end
tableAId是表B和表A之間的連接。 我有一些疑問:
- 這是一個外鍵約束?我在網上找不到任何說明has_many屬性創建外鍵的材料,儘管遷移文件暗示了這一點。
- 在創建TableB的實例時,我不知道爲什麼tableAId的值設置爲null。此創建是通過app \ views \ tableBs中new.html.erb中的form_for構造完成的。日期和時間值設置正確。我在tableAId,日期和時間列的new.html.erb文件中使用了相同的方法。我正在軌道控制檯中查看這些值。數據庫是sqlite3。
在此先感謝。
附錄: 遷移似乎是正確設置:
class AddTableAToTableB < ActiveRecord::Migration
def change
add_reference :tableBs, :tableA, index: true
add_foreign_key :tableBs, :tableAs
end
end
[編輯] 按以下@ilan berci的回答,我編輯表B像這樣:
class TableB
has_many: TableAs
accepts_nested_attributes_for :tableAs
end
還是表B的:tableAId屬性設置爲null。爲了完整起見,我還包括從表A從下拉選擇一個名字相關的表單域,但在提交表單
<%= f.label :tableA_id %>
<%= f.collection_select :tableA_id, TableA.all, :id,
:name, :include_blank => true %>
所以從上面的下拉菜單中,我看到正確表A的實例的列表, tableA_id仍然爲空。
你的TableA和TableB有多對多的關係。您還需要定義一箇中間表來管理它們之間的多對多關係。 –
@SachinR,這是強制性要求嗎?我的意思是,不能通過has_many屬性相關的兩個表在沒有中間表的情況下工作嗎? – AarCee