2016-10-13 36 views
0

我有兩個型號,Wineshas_one :registerRegistersbelong_to :wineregisters_controller.rb很簡單,由rails generate scaffold生成。如何將simple_fields_for與關聯的模型一起使用?

我想創建一個register對象與wine對象同時並確保它們正確鏈接。因此,我試圖在相同的形式下做到這一點。

我使用的是simple_form_forsimple_fields_for,我相信後者正在執行,但沒有register的實例,所以表單不包含完成的字段。

我認爲相關的代碼片段:

wines_controller.rb

def new 
    @wine = Wine.new 
    @wine.register = Register.new 
end 
def create 
    @wine = Wine.new(wine_params) 
    @wine.register.build 
    # error checking code 
end 
def wine_params 
    params.require(:wine).permit(:name, :cuvee, register_attributes: [:id, :short_name]) 

wines\_form.html.erb

<%= simple_form_for @wine do |f| %> 
<div class="field"> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
</div> 
<% f.simple_fields_for :register do |r| %> 
    <%= r.label :short_name %> 
    <%= r.input :short_name %> 
<% end %> 
</div> 

我已經內def createdef new方法,包括(在def create)嘗試了各種不同的代碼@wine.register.build = Register.new(register_params)@wine.register.build in def new

我在做什麼錯?顯然,當我需要創建一個對象時,需要實例化第二個對象以便simple_fields_for生成輸入區域。

回答

1

在你的葡萄酒型號:

class Wine 
    has_one :register 
    accepts_nested_attributes_for :register 
end 

在你的酒控制器定義以下新措施:

def new 
    @wine = Wine.new 
    @register = @wine.build_register 
end 

在你看來:

<%= simple_form_for @wine do |w| %> 
    <%= w.input: :name %> 
    <%= w.simple_fields_for :register do |r| %> 
    <%= r.input :short_name %> 
    <% end %> 
<% end %> 
+0

那爲我工作。所以,(除非我誤)語法是 linked_object = primary_object.method_linked object 感謝您的幫助。 – fatherdamo

+0

不客氣!是的,沒錯,在「一對多」關係的情況下,不要忘記將它複數化!另外不要忘記標記問題的答案;) – Viro

1

改爲嘗試做Wine.build_register。就像這樣:

def create 
    @wine = Wine.new(wine_params) 
    @wine = @wine.build_register 
    #other code 
end 
相關問題