Railsのインプットの学習が終わったので、アウトプットの練習に、
簡単なwebアプリを作成しています。
Vegetableテーブルに、string型で、countカラムに、野菜の個数を数字で保存しており、
editアクションで、その数字からいくつ取り出すか、を入力してもらい、
updateアクションで、入力値をparamsで受け取り、@edit_countに代入。入力値の値によってif
文で条件分岐して、
①@edit_count > @vegetable.countの時はeditアクションに戻す。
②@edit_count と @vegetable.countが同じ時はデータを消去する。
③それ以外の時(0 < @edit_count < @vegetable.count)の時は、@vegetable.countから@edit_countの値を引いて、データを更新して保存したいのですが、
③の部分を試してみると、”-”メソッドが見つからない、という内容のエラーが出てしまいます。
Ruby
1<div class="edit_wrapper"> 2 <h1 class="edit_title">ぬか床から取り出す</h1> 3 <p>【選択中のお野菜】</p> 4 <div class="select_date"> 5 <a><%= @vegetable.month %>月</a> 6 <a><%= @vegetable.day %>日</a> 7 <a><%= @vegetable.time %>時</a> 8 <a>に漬けた</a> 9 </div> 10 <div class="select_content"> 11 <a class="select_content_name"><%= @vegetable.name %></a> 12 <a class="select_content_count"><%= @vegetable.count %>個</a> 13 </div> 14 <div class="count_form"> 15 <p>【取り出す個数を入力してください】</p> 16 <div class="edit_error_message"> 17 <%= @edit_error_message %> 18 </div> 19 <%= form_tag("/vegetables/#{@vegetable.id}/update")do %> 20 <input type="number" class="edit_count" name="edit_count" min="1" max="99"><a> 個</a> 21 <p class="edit_caution">一度ぬか床から取り出したら戻せません。</p> 22 <p class="edit_caution">本当にお野菜を取り出しますか?</p> 23 <input class="update_btn" type="submit" value="OK!"> 24 <%= link_to("やめる", "/users/#{@vegetable.user_id}/mypage", {:class => "cancel_btn"}) %> 25 <% end %> 26 </div> 27</div>
Ruby
1def update 2 @vegetable = Vegetable.find_by(id: params[:id]) 3 @edit_count = params[:edit_count] 4 if @edit_count > @vegetable.count 5 @edit_error_message = "正しい数値を入力してください" 6 render("vegetables/edit") 7 elsif @edit_count == @vegetable.count 8 @vegetable.destroy 9 redirect_to("/users/#{@current_user.id}/mypage") 10 else 11 @vegetable.count = @vegetable.count - @edit_count 12 @vegetable.save 13 redirect_to("/users/#{@current_user.id}/mypage") 14 end 15 end
Ruby
1NoMethodError in VegetablesController#update 2undefined method `-' for "3":String Did you mean? -@ 3Extracted source (around line #37): 435 536 637 738 839 940 10 11 redirect_to("/users/#{@current_user.id}/mypage") 12 else 13 @vegetable.count = @vegetable.count - @edit_count 14 @vegetable.save 15 redirect_to("/users/#{@current_user.id}/mypage") 16 end 17 18
試してみたこと↓
paramsで受け取っているため、文字列だから引き算ができないのかと思い、.to_iメソッドを使ってみましたが、うまくいかず。
独学の部分も多いので、常識はずれのコードがあるかもしれません。
見辛かったら申し訳ないです・・・。
回答1件
あなたの回答
tips
プレビュー