LoginSignup
0
1

More than 3 years have passed since last update.

[rails] #createによりデータが2重に保存される問題

Last updated at Posted at 2020-09-01

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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1