2016-10-13 17 views
0

has_one :registerRegistersbelong_to :wineの2つのモデルがあります。 registers_controller.rbは、rails generate scaffoldによって作成された簡単です。simple_fields_forはどのように関連するモデルで使用しますか?

wineオブジェクトと同時にオブジェクトregisterを作成し、それらが正しくリンクされていることを確認します。したがって私は同じ形でこれをやろうとしています。

私はsimple_form_forsimple_fields_forを使用していますが、後者は実行されていますが、registerというインスタンスが存在しないため、フォームには完了フィールドが含まれていません。

Iは、関連するコードの断片であると思う

:私は(def createに)を含むdef createdef new方法内の様々な異なるコードを試みた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> 

から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]) 

から

@wine.register.build = Register.new(register_params)および@wine.register.builddef new

私は間違っていますか?明らかに、1つのオブジェクトを作成する必要があるときは、simple_fields_forが入力領域を生成するために、2番目のインスタンスをインスタンス化する必要があります。

答えて

1

:このようなあなたのビューで

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

:あなたのワインコントローラで

class Wine 
    has_one :register 
    accepts_nested_attributes_for :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オブジェクト ありがとうございました。 – fatherdamo

+0

ようこそ。うん、そう、「1対多」関係の場合には複数形にすることを忘れないでください!また、質問に答えてマークすることを忘れないでください;) – Viro

1

代わりにWine.build_registerを実行してください。あなたのワインのモデルでは

def create 
    @wine = Wine.new(wine_params) 
    @wine = @wine.build_register 
    #other code 
end 
関連する問題