2017-09-11 28 views
1

これはかなり単純なようですが、そうでないことが証明されています。複数のレコードを一度に作成するruby on rails

私は2つのモデル:著者と書籍を持っています。著者にはたくさんの本があり、書籍は著者に属しています。私はそれぞれの著者と情報が異なる単一の書式で多くの本を追加できるようにしたいと考えています。

class BooksController < ApplicationController 

def new 
@books = [] 
    5.times do 
    @books << Book.new 
    end 
end 

コントローラを作成する正しい方法であるかどうかはわかりません。次のようにビューがある:私は@booksが私のparamsで終わるために得ることができないとして、私の知る限り得ているようですので、私はまだメソッドを作成しようとするもらっていない

<%= form_tag(books_path(@books)) %> 
<% @books.each do |book| %> 
    <%= text_field_tag(:title) %> 
    <%= text_field_tag(:author) %> 
    <%= text_field_tag(:pages) %> 
<% end %> 
<%= submit_tag("Submit") %> 

。私が得ているのは、タイトル、著者、そして最後のレコードのページであり、ブックパラメルでさえありません。

+0

あなたは 'fields_for'ヘルパーの後にいます。 – meagar

答えて

2

form_tagあなたのモデルオブジェクトはわかりません。したがって、適切なキーの下にパラメータをラップしません。代わりにform_forを使用して、パラメータを構築する手間を省く必要があります。

関連オブジェクトを作成するには、を使用できます。

複数のオブジェクトを作成するには、send their params to your controller in an arrayが必要です。しかし、私はあなただけのレコードを保存することをお勧めします。あなたのコードはより洗練され、手でHTMLコードを構築するのではなく、form_forfields_forのようなRailsフォームヘルパーを利用することができます。

+0

'form_for 'で構築する正しい方法は何でしょうか? @booksローカル変数は配列なので、そのメソッドでどのように動作するのかよく分かりません –

+1

@booksを使用し、複数のレコードを1つのフォームで作成したい場合は、おそらくform_tagがついていて、手動でHTMLを構築しています、リンクされたソリューションのように。しかし、1つのレコードを1つの形式で作成するほうがよいと思います。コードはより洗練されており、ユーザーエクスペリエンスはおそらく優れています。ユーザーがリダイレクトせずにレコードを作成できるようにする場合は、常にajaxを使用できます。 – EJ2015

+0

さて、その目的は、1つのフォームで複数のレコードを作成して、すばやく作成することでした。アプリには既にフォームを追加するためのフォームがありますが、一括スタイルのインポートを可能にするフォームを追加することを検討したいと考えていました。 –

関連する問題