item_controller.rb
def index
# トップページ生成
end
def new
@item = Item.new
end
def create
@item= Item.new(item_params)
Item.create(item_params)
if @item.save
redirect_to action: 'index'
else
render :new
end
end
def item_params
params.require(:item).permit(:image)
end
トップページからデーター保存までの流れ
1,トップページを表示するitems#index
2,新規登録画面を生成するitems#new
3,new.html.erbのビュー画面からデーターを記入してボタン(submit)をおす
<%= form_with model: @item, local: true do |f| %>
4,items#createアクション実行され3で記入したデータがdbに保存される
(if文を使って条件分岐させる)
if @item.save
redirect_to action: 'index'
else
render :new
end
・データー保存成功したらitems#index(トップページ)にリダイレクト画面遷移する
・データー保存失敗したらitem#new(新規登録画面)が表示される
問題点・データー保存すると同じデーターが2つ保存されることに??
#データーが2重に保存される問題のあるコード
def create
@item= Item.new(item_params)
Item.create(item_params)
if @item.save
redirect_to action: 'index'
else
render :new
end
end
原因・(create)で1回保存(new,save)でもう一回保存しているから
解決方法・create,(new,save)どちらか消す
#一つのデーターがdbに保存される。newとsaveを消すパターン
def create
Item.create(item_params)
if
redirect_to action: 'index'
else
render :new
end
end
#一つのデーターがdbに保存される。createを消すパターン
def create
@item= Item.new(item_params)
if @item.save
redirect_to action: 'index'
else
render :new
end
end