2016-07-23 123 views
0

在我的第一個rails應用上工作,我被卡住了。我非常努力地解決這個問題,但我似乎無法弄清楚。我無法將屬於belongs_to的對象製作爲belongs_to用戶。Rails 5:使用belongs_to關聯創建一個對象belongs_to用戶

這些模型關聯結構:

class User < ApplicationRecord 
    has_many :projects, dependent: :destroy 

class Project < ApplicationRecord 
    belongs_to :user 
    has_many :docs, dependent: :destroy 

class Doc < ApplicationRecord 
    belongs_to :project 

我想我需要以某種方式引用我試圖建立文檔所屬的項目,但我堅持。如果我向doc表單添加hidden_​​field_tag以傳入project_id,然後使用docs控制器中的param將@project分配給該project_id,這可行,但我知道有比發送hidden_​​field_tag更好的方法...

關於什麼研究或解決方案的任何想法嗎?我覺得我錯過了一些非常基本的東西!

+0

我可以通過更改兩件事情來獲得代碼工作:1,在我的工作表上添加hidden_​​field_tag以傳遞project_id和2,在我的工作表中添加此代碼create function:@project = Project.find (params [:project_id])。但是,有一個比hidden_​​field更好的方法,對吧? – Matt

+0

第二種方式是通常所遵循的方式 –

回答

0

的作用雖然有可能是一個更標準的用例排序的答案,對我下面的工作。

我在用戶表中創建了一個新列,用於在active_project中存儲一個整數以引用項目的id。在創建文檔時,我首先將@project設置爲具有current_user.active_project id的項目,然後將該文檔創建爲屬於@project。

這可能有點倒退,但它有效,我可以使用active_project數據來允許用戶重新訪問他們上次的項目打開登錄。感謝@pavan的建議,他們讓我走上了正確的道路! :)

0

在您使用的是創建表的形式(如果該頁面訪問@project,可能是項目show.html.erb)

form_for([@project, @project.sheets.build]) do |f| 
#rest of the code 
end 

如果表格沒有訪問@項目然後 在表格控制器

@project = Project.find(params[:project_id]) #using data from params hash 
@sheet = @project.sheets.build 

的新的動作和在表單創建片

form_for([@project, @sheet]) do |f| 
end 

在創建表控制器

@project = Project.find(params[:project_id]) 
#rest of the code what you have 
+0

表單處於共享部分,在項目頁面上呈現。更新form_for部分導致錯誤。通過以下方式查找項目:project_id返回錯誤:無法找到沒有ID的項目。然而,在向create函數添加一行代碼時,添加hidden_​​field_tag以在表單上傳遞project_id時起作用。你能想出更好的方法嗎? – Matt

+0

請張貼你的項目頁面,它呈現局部和部分頁面。這可能有幫助 –

相關問題