簡體   English   中英

Rails 4新表單默認來自params

[英]Rails 4 new form defaults from params

我正在_form.html.erb視圖中使用form_for ,以便根據標准支架為編輯操作和新操作創建表單。

我有一個has_many寵物的模型所有者。

我想在我的views/owners/show.html.erb上放置一個html鏈接,以為所述所有者創建新的寵物。 此鏈接將指向pets_controller.rb的新操作,該操作在訪問后將在pets/new.html.erb呈現視圖。

我想要發生的是將owner_id與URL中的鏈接傳遞到pets_controller.rb的新操作,然后用作pets/new.html.erb collection_select的默認值

因此,我有一個創建新寵物的鏈接,但是由於該鏈接位於特定的所有者頁面上,因此我希望表單創建一個新寵物,使其已經設置了該所有者,因此用戶不必從列表中進行選擇。

必須在不更改寵物中編輯動作/視圖行為的情況下完成此操作。

我知道我可以傳遞GET參數,然后通過params在控制器中訪問它們,然后在操作中創建變量,這些變量將傳遞給視圖。 然后,我可以手動檢查默認值並在視圖中進行設置。 如果這是唯一的解決方案,我不需要編碼方面的幫助。

有沒有更好的方法可以做到這一點? 我可以通過這些格式傳遞參數,以便視圖將其拾取嗎? 是否無需手動編輯控制器和視圖?

盡管我個人傾向於按照您所說的做,然后在鏈接幫助器中傳遞參數,然后在pets視圖中訪問params數組,但您可能會發現這是探索Nested Resources的絕佳機會。 本質上,您可以使用以下命令聲明owner /:owner_id / pets /:pet_id路由:

resources :owners do
  resources :pets
end

然后,您可以鏈接到該路由,並引用:owner_id,而不必將查詢字符串附加到URI(使重新使用起來更為簡潔)。

這可能為您帶來更多工作,但也可能更具擴展性(並且當然與Rails的處事方式更加內聯)。

改版

在注釋中添加了以下有關鏈接助手的內容,但也希望在答案中反映出來。

展示寵物應該是:

<%= link_to owner_pet_path( owner_variable, pet_variable) %>

查看寵物的索引索引應該是:

<%= link_to owner_pet_path( owner_variable ) %>

這個問題的答案是太棒了。

正如@ConnorCMcKee所建議的那樣,考慮嵌套路由是明智的。 但是,如果您像我這樣的初學者,那么我發現它的第一步是將我的第二個控制器簡單地嵌套到第一個控制器中(即,將PetsController嵌套到OwnersController中),這對我的學習有所幫助。 然后,我將繼續路線。

該方法將類似於:

1. /在owner / index.html.erb中

鏈接到PetsController索引操作

進行此操作的關鍵是在鏈接參數中發送:owner_id 然后,該Pets索引操作將可以訪問該:owner_id並知道哪個:owner_id調用。

2. /在PetsController中,您將能夠使用該ID查找該所有者,如下所示:

params[:owner_id]

然后,您的操作就可以開始利用了解所有者稱呼它們的優勢。 請記住,盡管您在PetsController內部進行的所有重定向都需要保留params[:owner_id] 這是因為一旦您進入該嵌套結構,就必須對其進行維護並留在其中,並始終知道要使用哪個:owner_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM