22723


Ruby on Railsで開発をしています。  
今、機能として例えば出版社を一個登録するとその出版社で出版された本が自動的に登録されることを作ろうとしています。  
つまりCompaniesテーブルとBooksテーブルがあるという時、  
BooksはCompaniesのIdを持っていることにします。  
あと、会社登録画面で会社を1個登録します。会社の情報には何冊出版されたかの情報が入ってます。会社を登録すると何冊出版されたかのデータを利用してその分Booksに本を登録する感じです。

company, bookのモデルがあって  
companies_controllerがあります。  
今自分のcompanies_controllerのcreateの中には以下のように書いてあります。

[code]

    def create
      @company = Company.new(company_params)
    
      if @company.save
        # company_paramsのbook_numを利用してその分だけbookにデータを入れたい。
        @book = Book.new
    
        if @book.save
          redirect_to @company, notice: 'successfully created.'
        end
      else
        render :new
      end
    end
    
[/code]


CC BY-SA 3.0
2016-03-01T10:10:02.390
22697
2016-03-03T00:04:23.310
10710
question
ruby-on-rails
Railsのscaffold_controllerで複数行を一気にcreateする方法


おそらく`Company`と`Book`はhas_many/belongs_toの関係だろうな、と想像します。

`Book`に登録する情報は`Company`が持っているものだけなのであれば、モデルの方のコールバックで登録するのがいいのかなと思います。

[code]

    class Company < ActiveRecord::Base
      has_many :books
    
      after_create :create_books
    
      private
      def create_books
        self.book_num.times do
          self.books.create!({column1: self.some_column}) rescue raise ActiveRecord::Rollback
        end
      end
    end
    
[/code]

`Book`に登録すべき情報がフォームから渡されるのであれば、`book_num`の件数という要件からは少し外れますが、 Nested Model
Form/Nested
Attributesを利用する方法があります。ここで説明するには少々長くなるので、[Railscasts](http://railscasts.com/episodes/196-nested-
model-form-part-1?view=asciicast)など既存の情報を探してみてください。


CC BY-SA 3.0
2016-03-02T02:03:34.730
22723
2016-03-03T00:04:23.310
2016-03-03T00:04:23.310
5793
5793
22697
answer