私のアプリには3つの支払い方法を受け入れることができる販売者がいます。レコードを作成/編集するために私はPostgreSQLのフォームと配列フィールドに複数のチェックボックスを使用しています複数のチェックボックスの値は保存されますが、Railsフォームにはロードされません
面白いのは、作成と更新の両方で値を保存するとうまくいくということです。配列はチェックボックスの値に基づいて配列としてPGテーブルに保存されます。ただし、編集時に、編集フォームはデータベースから正しい値をロードしません。すべてのチェックボックスはチェックされず、PGテーブルの配列値は無視されます。すべてのチェックボックスがチェックされているので、マイグレーションでデフォルト値が設定されていても、同じことが作成されます。
ご協力いただければ幸いです。
= form_for @merchant, layout: :horizontal do |f|
= f.check_box :payment_accepted, { :multiple => true }, 'Credit Card', nil
= f.check_box :payment_accepted, { :multiple => true }, 'Paypal', nil
= f.check_box :payment_accepted, { :multiple => true }, 'Direct Deposit', nil
= f.submit 'Save Changes', :class => 'btn btn-primary'
私のコントローラのコードは次のとおりです:
class MerchantsController < ApplicationController
load_and_authorize_resource
before_action :set_merchant, only: [:show, :edit, :update, :destroy]
respond_to :html, :json, :js
def index
@merchants = Merchant.all
end
def show
end
def new
@merchant = Merchant.new
end
def edit
end
def create
@merchant = Merchant.new(merchant_params)
@merchant.save
respond_with(@merchant)
end
def update
@merchant.update(merchant_params)
flash[:notice] = 'Merchant was successfully updated.'
respond_with(@merchant)
end
def destroy
@merchant.destroy
redirect_to merchants_url, notice: 'Merchant was successfully destroyed.'
end
private
def set_merchant
@merchant = Merchant.find(params[:id])
end
def merchant_params
params.require(:merchant).permit(:name, :description, :notif_email, :category_id, :country_id, :costo_procesamiento, payment_accepted:[])
end
end
そして、私の移行:
共有を作成および編集のための部分的な表示
class CreateMerchants < ActiveRecord::Migration
def change
create_table :merchants do |t|
t.string :name
t.text :description
t.text :default_terms
t.text :notif_email
t.boolean :visible, default: true
t.integer :category_id
t.integer :country_id
t.integer :costo_procesamiento, null:false, default: 0
t.string :payment_accepted, array: true, default: "['Credit Card','Paypal','Direct Deposit']"
t.references :country, index: true, foreign_key: true
t.timestamps null: false
end
end
end
これは完全に働きました。私は十分にあなたに感謝できません! – Augusto