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も設定。
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
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。