2017-08-02 16 views
7

私は古いレールプロジェクトを少し手伝ってきました。私はしばらくレールで作業していないので、少し錆びており、道に沿って助けが必要です。ruby​​ on railsを使ってboolean値をpostgresデータベースに保存する

私はEコマースWebにオプションを追加しています。

顧客がその製品をチェックアウトした場合、バックエンドはactive admin

によって駆動されます。 彼は店でそれを拾うか、それを送ってもらうという選択肢を得る。

そして、私は、製品を送るべきかどうか、あるいは店で持ち上げるかどうかをバックエンドに示すようにしたい。

私はこの種のことに悩まされています。配信オプションはデータベースに保存されていないようです。誰かがこれを手伝ってくれるといいですね。

ここでは、ピックアップオプションのhtmlです。それはviews/orders/_form.html.erb

<div class="col-md-5 pick-up-buttons" id="country_div"> 
    <li> 
    <%= f.radio_button :pick_up, "1", checked: false, data: { question: "Pick up your items in the store" } %> 
    <%= f.label :pick_up, "Pick up your items in the store" %> 
    </li> 
    <li> 
    <%= f.radio_button :pick_up, "0", checked: true, data: { question: "Send the items by mail" } %> 
    <%= f.label :pick_up, "Send the items by mail" %> 
    </li> 
</div> 

、ここにありますorders_controller.rb

class OrdersController < ApplicationController 
    include CurrentCart 
    before_action :set_cart, only: [:new, :create] 
    before_action :set_order, only: [:show, :edit, :destroy] 

    def index 
    @orders = Order.all? 
    end 

    def new 
    @images = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg"] 
    @random_no = rand(5) 
    @random_image = @images[@random_no] 

    if @cart.product_items.empty? 
     redirect_to root_url, notice: 'Your Cart is Empty' 
     return 
    end 

    @order = Order.new 
    @client_token = Braintree::ClientToken.generate 

    @del_cost_euro = 20 
    end 

    def create 
    @order = Order.new(order_params) 
    if @order.save 
     charge 
     if @result.success? 
     @order.add_product_items_from_cart(@cart) 
     Cart.destroy(session[:cart_id]) 
     session[:cart_id] = nil 
     OrderNotifier.received(@order).deliver 
     redirect_to root_url, notice: 'Thank You for Your Order' 
     else 
     flash[:error] = 'Please Check Your Cart' 
     redirect_to root_url, alert: @result.message 
     @order.destroy 
     end 
    else 
     @client_token = Braintree::ClientToken.generate 
     render :new 
    end 
    end 

    def show 
    end 

    def destroy 
    @order.destroy 
    redirect_to root_url, notice: 'Order deleted' 
    end 

    private 
    def set_order 
    @order = Order.find(params[:id]) 
    end 

    def order_params 
    params.require(:order).permit(:name, :email, :address, :city, :country, :pick_up, :delivery) 
    end 

    def charge 
    @result = Braintree::Transaction.sale(
     amount: @cart.total_price_usd, 
     payment_method_nonce: params[:payment_method_nonce]) 
    end 
end 

そして、ここではapp/admin/order.rb

ActiveAdmin.register Order do 

permit_params :shipped 

after_update do |order| 
    OrderNotifier.shipped(@order).deliver if order.shipped 
end 

show do |order| 
    panel 'Customer Details' do 
    attributes_table_for order, :name, :email, :address, :city, :country 
    end 

    panel 'Created' do 
    "#{time_ago_in_words order.created_at} ago" 
    end 

    panel 'Shipped' do 
    order.shipped 
    end 

    panel 'delivery' do 
    order.pick_up 
    end 

    panel 'Order Details' do 
    table_for(order.product_items) do 
     column 'Product' do |item| 
     item.product.title 
     end 

     column 'Quantity' do |item| 
     item.quantity 
     end 

     column 'Price Euro' do |item| 
     number_to_currency item.total_price_eur 
     end 

     column 'Price USD' do |item| 
     number_to_currency item.total_price_usd 
     end 
    end 
    end 

    panel 'Order Total USD' do 
    number_to_currency order.total_price_usd 
    end 

    panel 'Order Total Euro' do 
    number_to_currency order.total_price_eur 
    end 
end 
schema.rbファイル

create_table "orders", force: :cascade do |t| 
    t.string "name" 
    t.string "email" 
    t.text  "address" 
    t.string "city" 
    t.string "country" 
    t.datetime "created_at",     null: false 
    t.datetime "updated_at",     null: false 
    t.boolean "shipped", default: false 
    t.boolean "pick_up", default: false 
    t.string "delivery" 
end 

そして、ここの一部ですされます

+0

radio_button_Tagを使用しようとしましたか? https://apidock.com/rails/ActionView/Helpers/FormTagHelper/radio_button_tag –

+0

もう1つのことは、ラジオボタンがこの機能に適していると思いますか?選択ドロップダウンはうまくいかないでしょうか? –

+0

こんにちは@GabrielMesquitaいいえ私は 'radio_button_Tag'を使用していません...私はこの機能のために何が正しいかわからない、多分選択ドロップダウンは良いでしょう。私はこのすべての失われたの種類を取得しています:)あなたはこれを行う方法を投稿できますか? – codegirl

答えて

2

商品が店頭でピックアップされるのか、メールで正しく送信されるのかを知りたいですか?あなたが失われているので

することは、簡単な解決策は次のようになります。

1 - "pick_up"

2をt.stringにt.boolean "pick_up" に変更 - リストを作成するには、このhttp://guides.rubyonrails.org/form_helpers.html#the-select-and-option-tagsを使用しますこの2つのオプションがあります。

3 - コントローラで、ユーザーが望むオプションを保存します。

ラジオボタンを使用するには、データベースに2つのフィールドが必要です。このような何か:

t.boolean「pick_up」 t.boolean、ユーザがピックアップすることを選択した場合

「sent_email」、あなたは拾うための真の値とのparamを受け取ることになります、あなたは保存することができますあなたのデータベース。だからこれも別のオプションです!

希望します。

+1

ありがとう@GabrielMesquita、booleanが真または偽であるため、なぜ私は 't.boolean'をstringに変更するべきかわかりません。データベースには、true =送信されたプロダクトまたはfalse =プロダクトのピックアップが表示されます。 – codegirl

+1

@codegirlブール型は、あなたが言ったように、真か偽か(または、あなたのコード/ DBによって処理されるはずですが)です。明日あなたの上司が別のタイプの配達を追加したいと思ったら、「鳩」と言うでしょうか?このブール型の列を文字列型に変換し、現在の値などに応じて既存のデータを更新する必要があります。どこに行くのか参照してください。あなたは現在潜在的にもっと大きなものになる可能性がある機能を実装しています。今すぐ柔軟なコード/ DB構造を作成しようとします。その結果として、多くの努力を費やす必要はありません。 – MrYoshiji

+0

@MrYoshijiさんのように、文字列はより柔軟で、私はあなたの問題を解決すると思います。答えが助けられたら、upvoteを与えてください:) –

関連する問題