2013-07-09 3 views
0

У меня есть страница продукта для создания и страница добавления фотографии. Добавить страницу с фотографией следует добавить фотографии к только что созданному продукту.Rails nomethod error on create action

я могу добавить фото страницу /products/:product_id/pics(.:format), но я получаю сообщение об ошибке на отправить

ActiveRecord :: RecordNotFound (Не удалось найти продукт без ID):

контроллер фото

def create 
    @product = Product.find(params[:product_id]) # <--- error here 
    @photo = Photo.new 

    if @photo.valid? 
    @photo.product_id = @product.id 
    @photo.save! 
    respond_to do |format| 
     format.html { redirect_to product_path(@product) } 
     format.json { render json: @product } 
    end 
    else 
    redirect_to root_url, :notice => "Somehting went wrong!" 
    end 
end 

pics.html.haml

= form_for @photo, :html => { :multipart => true, :id => "fileupload" } do |f| 
    = f.file_field :upload 

продукты контроллер

def pics 
    @product = Product.find(params[:product_id]) 
    @photo = Photo.new 
    # @product.photos.build 
    end 

полная консоль ошибок

работы POST "/ фото" для 127.0.0.1 в 2013-07-09 02:11:11 - 0400 Обработка фотографиямиController # create as JSON Параметры: {"utf8" => "✓", "authenticity_token" => "K9jWB2D0bFUB5 + KOCRKLUsuDGNLchjzCBCL1h1znOiQ =", "photo" => {"upl ДОА "=> #>}} Завершено 404 не найдено в 1мс

ActiveRecord :: RecordNotFound (Не удалось найти продукт без ID): приложение/контроллеры/photos_controller.rb: 15: в` создать»

консоль с раствором sachins

работы POST "/ фото" для 127.0.0.1 на 2013-07-09 2:55:25 -0400 обработки по PhotosController # создать как JSON Параметры: { "utf8 "=>" ✓ "," authenticity_token "=>" 5RV + GUCvNEFrw7l3/ApqAlbK/XJP78LmDR2Hc + O0rQ0 = "," product_id "=>" 125 "," photo "=> {" upload "=> #>} } Нагрузка продукта (0,1 мс) ВЫБРАТЬ «ПРОДУКТЫ». * ОТ «ПРОДУКТЫ» ГДЕ «ПРОДУКТЫ». «Id» =? ПРЕДЕЛ 1 [[ "Идентификатор", "125"]] перенаправлены http://google.com/ завершенного 302 найдено в 4 мс (ActiveRecord: 0,1 мс)

работы GET "/" для 127.0.0.1 в 2013-07-09 02: 55:25 -0400 Обработка по StaticPagesController # home как JSON Renderinged static_pages/home.html.haml в макетах/приложении (0,1 мс) Пользовательская нагрузка (0,3 мс) SELECT "users". * FROM "пользователи" WHERE "пользователи ». "auth_token" IS NULL LIMIT 1 Завершена 200 OK в 93ms (Просмотров: 91.8ms | ActiveRecord: 0.3ms)

ответ

2

попробовать это: ---

фотографии контроллер

def new 
    @product = Product.find(params[:product_id]) 
    @photo = Photo.new 
    @photo.product_id = @product.id 
end 

pics.html.haml

= form_for @photo, :html => { :multipart => true, :id => "fileupload" } do |f| 
    = f.file_field :upload 
    = hidden_field_tag 'product_id', @photo.product_id 
+0

Я просто попробовал, чтобы увидеть обновление –

1

ошибка есть в доступе к product_id из PARAMS

использование params[:product_id] вместо params[:product][:product_id]

+0

ActiveRecord :: RecordNotFound (не удалось найти продукт без идентификатора): –

+0

предоставляет журнал ошибок с трассировкой из файла журнала. –

+0

Я добавил его в edit –

2

Использование form_for [@product, @photo] вместо того, чтобы просто @photo в вашей форме. Обязательно, конечно, найти продукт, используя params[:product_id].

Вы должны гнездиться свои маршруты, как это:

resources :products do 
    resources :photos 
end 

В противном случае вы не будете иметь params[:product_id] по вашему запросу.

+0

, который дает мне неопределенный метод 'product_photos_path 'для # <# <Класс: 0xb5e88298>: 0xb5a572a0> –

+0

Я обновил ответ. –

2

попробовать в вашей форме

form_for [@product, @photo] 
0
Just set the hidden_field_tag in form_for 
eg:- 

= hidden_field_tag 'product_id', @product.id