2017-01-14 6 views
1

Я пытаюсь создать объект "gif", используя form_for. Однако, когда я нажимаю кнопку «Отправить», я просто перенаправляюсь на мою страницу «gif», и ничего не создается. Я хочу нажать «submit» и создать «gif» и перенаправить на его страницу.Rails form_for не работает

Вот мой контроллер страницы

class GifsController < ApplicationController 

def index 
    if params[:tag] 
     @gifs = Gif.tagged_with(params[:tag]) 
    elsif params[:search] 
     @gifs = Gif.search(params[:search]) 
    else 
     @gifs = Gif.all 
    end 
end 

def show 
    @gif = Gif.find(params[:id]) 
end 

def new 
    @gif = Gif.new 
end 

def create 
    @gif = Gif.new(gif_params) 

    @gif.save 
    redirect_to @gif 
end 

private 
def gif_params 
    params.require(:gif).permit(:title, :link, :recipe, :all_tags, ingredients_attributes: [:id, :name, :_destroy], directions_attributes: [:id, :step, :_destroy]) 
end 

end 

Вот моя форма на новой странице

<%= form_for @gif, :as => :gif, :url => gifs_path do |f| %> 
..... 
<% end %> 

Терминал Выход:

Started POST "/gifs" for 69.127.215.48 at 2017-01-14 21:56:18 +0000 
Processing by GifsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"cPycHb5KywsTgLbHN+sZJjSbyAbGlGce4GDpqolTA5vQNCScBszU1C0wXqFF+jB5Y6OYfSSK0PTe1Qod9O1aGA==", "gif"=>{"title"=>"qwe", "link"=>"http://i.imgur.com/AYPJoxS.gif", "ingredients_attributes"=>{"1484430976428"=>{"name"=>"123", "_destroy"=>"false"}}, "directions_attributes"=>{"1484430978979"=>{"step"=>"123", "_destroy"=>"false"}}}, "commit"=>"Upload"} 
    (0.2ms) begin transaction 
    (0.1ms) rollback transaction 
Redirected to https://recipes-in-a-gif-dleggio1.c9users.io/gifs 
Completed 302 Found in 196ms (ActiveRecord: 0.3ms) 


Started GET "/gifs" for 69.127.215.48 at 2017-01-14 21:56:18 +0000 
Processing by GifsController#index as HTML 
    Rendering gifs/index.html.erb within layouts/application 
    Gif Load (0.3ms) SELECT "gifs".* FROM "gifs" 
    Tag Load (0.1ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."gif_id" = ? [["gif_id", 1]] 
    Tag Load (0.1ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."gif_id" = ? [["gif_id", 2]] 
    Tag Load (0.1ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."gif_id" = ? [["gif_id", 3]] 
    Tag Load (0.1ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."gif_id" = ? [["gif_id", 4]] 
    Tag Load (0.1ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."gif_id" = ? [["gif_id", 5]] 
    Rendered gifs/index.html.erb within layouts/application (11.2ms) 
Completed 200 OK in 73ms (Views: 70.6ms | ActiveRecord: 0.8ms) 

Если изменить form_for в: GIF вместо @ gif, он работает. Тем не менее, мне нужно использовать @gif для драгоценного камня, который я использую, coccoon.

ответ

1

Что происходит, когда вы удалите :as => :gif, :url => gifs_path из вашей формы, как так:

<%= form_for @gif do |f| %> 
..... 
<% end %> 

Это стоит попробовать, я сомневаюсь, что вам нужно, что другие вещи

UPDATE:

вашей консоли вывода показывает следующие:

(0.2ms) begin transaction 
(0.1ms) rollback transaction 

В нем также показано описание вследствие PARAMS передается:

"gif"=>{ 
    "title"=>"qwe", 
    "link"=>"http://i.imgur.com/AYPJoxS.gif", 
    "ingredients_attributes"=>{ 
    "1484430976428"=>{ 
     "name"=>"123", 
     "_destroy"=>"false" 
    } 
    }, 
    "directions_attributes"=>{ 
    "1484430978979"=>{ 
     "step"=>"123", 
     "_destroy"=>"false" 
    } 
    } 
} 

Ваш gif_params метод выглядит хорошо, так что кажется, что что-то не так, когда вы пытаетесь сохранить GIF. Для того, чтобы выяснить, что происходит, я пошел бы в рельсы с и сделайте следующее:

gif = Gif.create "title"=>"qwe", "link"=>"http://i.imgur.com/AYPJoxS.gif", "ingredients_attributes"=>{ "1484430976428"=>{ "name"=>"123", "_destroy"=>"false" }}, "directions_attributes"=>{ "1484430978979"=>{ "step"=>"123", "_destroy"=>"false" }} 

Выше мы проходим почти точно такие же Params в ActiveRecord, и вы будете надеяться увидеть какое-то сообщение об ошибке на экране когда вы запускаете этот код. Также может стоить работать: puts gif.errors, чтобы развернуть. Странно, что вы не получаете сообщений об ошибках, когда делаете это в браузере.

Я видел нечто подобное в одном из своих проектов, где я неправильно настроил Pundit. Не уверен, что это помогает.

+0

Пробовал это, все то же самое – user3182252

+0

Хм, я думаю, пришло время выяснить, какой запрос происходит, когда вы нажимаете кнопку отправки. Можете ли вы разместить вывод своего терминала, пожалуйста? Вероятно, я должен был сначала задать это :) – stephenmurdoch

+0

Добавил (а) мой первоначальный пост, спасибо – user3182252