1対多を一括処理するフォームのソース [rails]
前回のソース。
http://www.youter.jp/peridot24/two_models_in_one_form20091615.zip
次回は、fleximageプラグインを利用して、画像のアップロードも組み込んでみたい。
下記は、今回までの作成手順の覚え書き。
作成手順
1.プロジェクトを新規作成し、2つのモデルを追加。db:migrate。
$ rails two_models_in_one_form
$ cd two_models_in_one_form
$ ruby script/generate scaffold product name:string
$ ruby script/generate model image product_id:integer caption:string
$ rake db:migrate
2.1対多のリレーションを設定。また、accepts_nested_attributes_forも設定。
3.config/routes.rbの編集
4.javascriptソースをコピペ
public/javascripts/application.js
public/javascripts/delegate.js
5.ヘルパをコピペ
app/helper/layout_helper.rb
app/helper/products_helper.rb
6.コントローラの修正
app/controllers/products_controller.rb
アクションnewに、次の一行を追加。
def new
@product = Product.new
+ @product.images.build
respond_to do |format|
format.html # new.html.erb
8.ビューの作成・修正
app/views/products/show.html.erb
app/views/products/new.html.erb
app/views/products/edit.html.erb
app/views/products/_form.html.erb
app/views/products/_image.html.erb
こんな感じだったかな。
http://www.youter.jp/peridot24/two_models_in_one_form20091615.zip
次回は、fleximageプラグインを利用して、画像のアップロードも組み込んでみたい。
下記は、今回までの作成手順の覚え書き。
作成手順
1.プロジェクトを新規作成し、2つのモデルを追加。db:migrate。
$ rails two_models_in_one_form
$ cd two_models_in_one_form
$ ruby script/generate scaffold product name:string
$ ruby script/generate model image product_id:integer caption:string
$ rake db:migrate
2.1対多のリレーションを設定。また、accepts_nested_attributes_forも設定。
diff --git a/app/models/image.rb b/app/models/image.rb index 1b6d3d7..faa3353 100644 --- a/app/models/image.rb +++ b/app/models/image.rb @@ -1,2 +1,3 @@ class Image < ActiveRecord::Base + belongs_to :product end diff --git a/app/models/product.rb b/app/models/product.rb index 077a819..037d0b7 100644 --- a/app/models/product.rb +++ b/app/models/product.rb @@ -1,2 +1,3 @@ class Product < ActiveRecord::Base + has_many :images, :dependent => :destroy + accepts_nested_attributes_for :images, + :allow_destroy => true end
3.config/routes.rbの編集
diff --git a/config/routes.rb b/config/routes.rb index 61ff96b..ead1038 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,7 @@ ActionController::Routing::Routes.draw do |map| - map.resources :products + map.resources :products do |product| + product.resources :images + end # The priority is based upon order of creation: first created -> highest priority.
4.javascriptソースをコピペ
public/javascripts/application.js
public/javascripts/delegate.js
5.ヘルパをコピペ
app/helper/layout_helper.rb
app/helper/products_helper.rb
6.コントローラの修正
app/controllers/products_controller.rb
アクションnewに、次の一行を追加。
def new
@product = Product.new
+ @product.images.build
respond_to do |format|
format.html # new.html.erb
8.ビューの作成・修正
app/views/products/show.html.erb
app/views/products/new.html.erb
app/views/products/edit.html.erb
app/views/products/_form.html.erb
app/views/products/_image.html.erb
こんな感じだったかな。
タグ:Rails
コメント 0