前提・実現したいこと
編集画面にラジオボタンの実装。
ラジオボタンで一覧画面での表示フラグを切り替えたい。
発生している問題・エラーメッセージ
編集画面のラジオボタンで表示フラグ(show_flag)をtrueに切り替えてもデータベースに反映されない。デフォルトのfalseのままになっている。
該当のソースコード
Viewのフォーム
_form.html.erb
ruby
1<%= form_for @carrier do |a| %> 2 3<% if @carrier.errors.any? %> 4 <h3>入力した内容にエラーが<%= @carrier.errors.count %>件あります</h3> 5 <ul> 6 <% @carrier.errors.full_messages.each do |message| %> 7 <li><%= message %></li> 8 <% end %> 9 </ul> 10<% end %> 11 12<p> 13<%= a.label :コード %> 14<%= a.text_field :code %> 15</p> 16 17<p> 18<%= a.label:名前 %> 19<%= a.text_field:name %> 20</p> 21 22<p> 23 <%= a.label :show_flag, :show %> 24 <%= a.radio_button :show_flag, true %> 25 <%= a.label :show_flag, :hide %> 26 <%= a.radio_button :show_flag, false %> 27</p> 28 29<%= a.submit "登録" %> 30 31<% end %> 32 33
マイグレーションファイル
20190611080735_add_valid_flag_to_carriers.rb
class AddValidFlagToCarriers < ActiveRecord::Migration[5.0] def change add_column :carriers, :show_flag, :boolean, default:false, null:false end end
Viewの一覧画面
index.html.erb
Ruby
1<div> 2 <div class="col-lg-12"> 3 <h3 class="page-header"><%=raw @page_title || 'AmazonCarrierマスター管理'%></h3> 4 </div> 5 <% if flash[:notice] %> 6 <p><%= flash[notice] %></p> 7 <% end %> 8 <table> 9 <thead> 10 <tr> 11 <th class>フラグ</th> 12 <th class=''>コード</th> 13 <th class=''>名前</th> 14 </tr> 15 </thead> 16 <tbody> 17 <% @carrier.each do |a| %> 18 <tr> 19 <td><%= a.show_flag %></td> 20 <td><%= link_to a.code, edit_carrier_path(a.id) %></td> 21 <% if a.show_flag == true then %> 22 <td><%= a.name %></td> 23 <% end %> 24 </tr> 25 <% end %> 26 27 <%= link_to "新規登録", new_carrier_path %> 28 <input type="checkbox" name="show_all" value="flag">全部show 29 </tbody> 30 </table> 31</div> 32
carriers_controller.rb
ruby
1class CarriersController < ApplicationController 2 def index 3 #carrier = Carrier.find_by(show_flag: false) 4 @carrier = Carrier.all 5 end 6 7 def edit 8 @carrier = find_carrier_by_id 9 end 10 11 def update 12 @carrier = find_carrier_by_id 13 if @carrier.update(carrier_params) 14 redirect_to carriers_path, notice: "#{@carrier.name}を更新しました。" 15 else 16 render action: :edit 17 end 18 end 19 20 def new 21 @carrier = Carrier.new 22 end 23 24 def create 25 #@carriers = Carrier.new(params[:carrier]) 26 @carrier = Carrier.new(carrier_params) 27 if @carrier.save 28 #flash[:notice]="新規データを登録しました。" 29 redirect_to carriers_path, notice: "#{@carrier.name}を登録しました。" 30 #redirect_to "/carriers" 31 #redirect_to carriers_path 32 else 33 #failse kakikomi 34 render action: :new 35 end 36 end 37 38 def destroy 39 @carrier = find_carrier_by_id 40 @carrier.destroy 41 redirect_to carriers_path, notice: "#{@carrier.name}を削除しました。" 42 end 43 44 def carrier_params 45 params.require(:carrier).permit(:code, :name) 46 end 47 48 def find_carrier_by_id 49 Carrier.find(params[:id]) 50 end 51 52end 53
carrierテーブル
一覧画面
試したこと
文法の確認
参考にしたリンク
【開発メモ】Ruby on Railsのform_forでラジオボタンを設置する方法
https://freesworder.net/rails-form_for-radio/
補足情報(FW/ツールのバージョンなど)
Rails 5.0.7.2
Ubuntu VERSION="16.04.6 LTS (Xenial Xerus)"
Win10 VirtuaBox上
ruby 2.4.6p354
gem 2.6.14.4
回答2件
あなたの回答
tips
プレビュー