我有兩個模型鏈接在has_one/belongs_to關聯中;計算機和Ipv6Address分別。Rails - 嵌套表單fields_for不呈現
我已經預先填充了Ipv6Address表,並列出了我希望它具有的所有條目,現在我需要在計算機新/編輯表單上有一個下拉列表,以從Ipv6中選擇一個項目以將其與其關聯用。 需要預先填充的原因是,計算機可以與之相關聯的預定義的IPv6範圍,並且我希望它對於最終用戶來說只需從列表中盲選一些內容即可必須理解他們爲什麼這樣做;但要給任何知道選擇他們想要的機會的人。
到目前爲止,我所見過的所有內容似乎只在您在新窗體上同時創建兩個對象時才起作用,然後再編輯它們。
我試着根據我在網上找到的例子來設置我的MVC,並通過結算出類似主題上的其他stackoverflow問題。
計算機型號:
class Computer < ActiveRecord::Base
has_one :ipv6_address
accepts_nested_attributes_for :ipv6_address
...
Ipv6Address型號:
class Ipv6Address < ActiveRecord::Base
attr_accessible :computer_id, :ip_address
belongs_to :computer
...
電腦控制器:
class ComputersController < ApplicationController
def new
@computer = Computer.new
@ipv6s = Ipv6Address.where('computer_id IS NULL').limit(5)
end
def edit
@computer = Computer.find(params[:id])
@ipv6s = Ipv6Address.where('computer_id = #{@computer.id} OR computer_id IS NULL').order('computer_id DESC').limit(5)
end
計算機的新形式:
<%= simple_form_for(@computer) do |f| %>
<%= f.fields_for :ipv6_address do |v6| %>
<%= v6.input :ipv6_address, :collection => @ipv6s %>
<% end %>
<% f.button :submit %>
<% end %>
當這個新窗體呈現時,沒有包含ipv6_address的輸入字段,儘管沒有引發錯誤。我檢查了渲染頁面的源代碼,沒有提到「ipv6」。
如果我改變fields_for到:
<%= f.fields_for :ipv6_address, @ipv6s do |v6| %>
然後我得到的出現在頁面上,一個爲每個對象在@ipv6s
,每個都包含對象的@ ipv6s的完整列表上的多個下拉選擇字段。
一個很好的解決問題的方法,我記得簡要地想這樣做,但由於某種原因,它並沒有在我的腦海走到一起這麼好聽,我會看看我是否能在幾個小時內實現這個時間,然後將更新這篇文章。 – bdx
工作出色,謝謝!這將幫助我清理另一個模型。 – bdx
太棒了!很高興聽到:) –