2016-03-22 28 views
1

Uygulamamın 3 ödeme yöntemini kabul edebilen iş ortakları var. Kayıtları oluşturmak/düzenlemek için PostgreSQLBirden çok onay kutusu değerleri kaydedildi, ancak Raylar biçiminde yüklenmedi

'daki bir form ve bir dizi alanında birden çok onay kutusu kullanıyorum. Komik olan şey, hem oluştururken hem de güncellerken değerleri kaydederken iyi çalışmasıdır. Dizi, onay kutularına dayalı bir dizi olarak PG tablosuna iyi kaydedilir. Ancak, düzenleme yaparken, düzenleme formu doğru değerleri veritabanından yüklemez. Tüm onay kutuları, PG tablosundaki dizi değerlerini göz ardı ederek her zaman işaretsiz görünür. Taşıma işlemi, geçişin varsayılan olarak onaylandığı varsayılan tüm onay kutularını belirlediği halde oluştururken gerçekleşir.

Herhangi bir yardım için teşekkür ederiz.

= 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' 

Benim denetleyicisi kodudur:

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 

Ve göç:

Paylaşılan oluşturmak ve düzenlemek için kısmi görüntülemek

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 

cevap

1

onay kutularını var biliyor Bunun sebebi ise birden çok değerdir, hangisinin hangisinin olduğunu bilmezler (kontrol edilen/işaretlenmemiş değerlerden çıkamazlar). kendilerinin ya kontrol edilmesi gerektiği zamanı bilmeleri için onay kutularını değiştirin:

= f.check_box :payment_accepted, { :multiple => true, checked: @payments.include?('Credit Card')}, 'Credit Card', nil 
= f.check_box :payment_accepted, { :multiple => true, checked: @payments.include?('Paypal') }, 'Paypal', nil 
= f.check_box :payment_accepted, { :multiple => true, checked: @payments.include?('Direct Deposit') }, 'Direct Deposit', nil 

ve denetleyici içinde

ekleyin: Bu mükemmel çalıştı

def edit 
    @payments = @merchant.payment_accepted 
end 
+0

. Sana yeterince teşekkür edemem! – Augusto

İlgili konular