2016-06-22 16 views
0

PersonモデルとPostモデルのhas_may関係にnested_formを実装しました。ネストされたフォーム:別のオブジェクトからfields_forをコピー

class Person 
    has_many :posts 
    accepts_nested_attributes_for :posts 
end 

これはうまくいきます。前の人のすべての属性を入力することによって、新しい人物ページにリダイレクトするボタン「コピー人物」があります。その人の投稿を除いて、人のすべてのフィールドに人口が表示されます。ここでは、レンダリングのポストのビューのコードは次のとおりです。

<%= f.fields_for :posts do |ff| %> 
    <%= render 'post_fields', ff: ff %> 
<% end %> 

コントローラ:

def copy_person 
    @person = Person.new 
    @previous_person = Person.find(params[:id]) 
    redirect_to new_person_url(@person) 
end 

人は3つのポストを持っており、それが人間のすべてのフィールドを埋める必要がありますし、それをコピーしている間にも3件の投稿を表示しなければならない場合。以前の人物オブジェクトは次のように表示されます@previous_person

これらの投稿を表示するために必要な変更はありますか?

+0

DBにコピーされた人がコピーされますか?コントローラコードを提供してください。 – retgoat

+0

はいそれは永続化され、表示できる@previous_personとして – Arif

+0

私は自分の投稿なしで人だけをコピーすると仮定します。だからこそ、あなたは自分自身と誰の投稿も全く見ることができないのです。 – retgoat

答えて

1

previous_personの属性

def copy_person 
    previous_person = Person.find(params[:id]) 
    @person = Person.create!(previous_person.attributes.except("id")) 
    previous_person.posts.each do |old_posts| 
    @person.posts.create!(old_posts.attributes.except("id")) 
    end 
end 

すべての記事と前のものからコピーされ今では新しく作成した人によると、新しい人と彼らのポストを作成することを検討してください。また、dupメソッドを使用して人のコピーを作成することもできます

def copy_person 
    previous_person = Person.find(params[:id]) 
    @person = previous_person.dup 
    @person.save! 
    previous_person.posts.each do |old_posts| 
    @person.posts.create!(old_posts.attributes.except("id")) 
    end 
end 
関連する問題