質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1391閲覧

購入ボタンを押して購入できるようにしたい

toratail

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/11/07 13:16

編集2020/11/08 08:37

購入機能の実装を行っています。

購入するのボタンを押したらNoMethodErrorが出てしまい、
コントローラーを確認するも、記述ミスがわかりません。

idを遷移させたいのです。

よろしくお願いします。

エラーメッセージ Routing Error No route matches [GET] "/items/ItemOrder/order"
order/index <div class='buy-btn'> <%# <%= f.submit "購入" ,class:"buy-red-btn" %> <%= link_to '購入', order_item_path(), class: "buy-red-btn" %> </div>
order.controller class OrdersController < ApplicationController before_action :authenticate_user!, only: :index before_action :set_order, only: [:index, :create] before_action :set_present, only: :index # before_action :set_pay, only: [:create] before_action :find_item, only: :order before_action :set_card, only: :index before_action :set_address, only: :index def index redirect_to new_card_path and return unless current_user.card.present? @order = OrderDonation.new @cards = Card.all end def create @order = OrderDonation.new(order_params) if @order.valid? @order.save redirect_to root_path else render 'index' end end def order redirect_to new_card_path and return unless current_user.card.present? Payjp.api_key = ENV["PAYJP_SECRET_KEY"] customer_token = current_user.card.customer_token Payjp::Charge.create( amount: @item.price, customer: customer_token, currency: 'jpy' ) ItemOrder.create(item_id: params[:id]) redirect_to root_path end private def order_params params.require(:order_donation).permit(:post_id, :prefecture_id, :city, :address, :buildingname, :tel, :token).merge(user_id: current_user.id, item_id: params[:item_id]) end def set_order @item = Item.find(params[:item_id]) end def set_present if @item.order.present? redirect_to root_path elsif current_user.id == @item.user_id redirect_to root_path end end # def set_pay # Payjp.api_key = ENV['PAYJP_SECRET_KEY'] # Payjp::Charge.create( # amount: @item.price, # card: order_params[:token], # currency: 'jpy' # ) # end def find_item @item = Item.find(params[:id]) end def set_card @card = Card.find_by(user_id: current_user.id) end def set_address @address = Address.find_by(user_id: current_user.id) end end
routes.rb Rails.application.routes.draw do get 'cards/new' get 'users/show' devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks', registrations: 'users/registrations' } devise_scope :user do get 'addresses', to: 'users/registrations#new_address' post 'addresses', to: 'users/registrations#create_address' end root to: 'items#index' resources :items do resources :orders, only:[:index, :create] post 'order', on: :member resources :comments, only: :create end resources :users, only:[:show, :edit, :update] resources :cards, only: [:new, :create] end
order.model class Order < ApplicationRecord belongs_to :user belongs_to :item has_one :address end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2020/11/07 21:34

エラーメッセージを載せて
toratail

2020/11/08 08:36

Routing Error No route matches [GET] "/items/ItemOrder/order" こちらになります!
winterboum

2020/11/08 08:42

それで全文? dのファイルのどこでとか?
toratail

2020/11/08 09:02

そんなのない!
winterboum

2020/11/08 09:58

order/index.htmlで購入するのでしょうか? そこ全文少なくとも form の所を載せてください
guest

回答1

0

自己解決

order コントローラーを修正
order index 修正

修正前

order.controller 省略 def create @order = OrderDonation.new(order_params) if @order.valid? @order.save redirect_to root_path else render 'index' end end 省略 private def order_params params.require(:order_donation).permit(:post_id, :prefecture_id, :city, :address, :buildingname, :tel, :token).merge(user_id: current_user.id, item_id: params[:item_id]) end 省略 end

修正後

order.controller 省略 def create @order = Order.create(order_params) if @order.valid? @order.save redirect_to root_path else render 'index' end end 省略 private def order_params params.permit(:item_id).merge(user_id:current_user.id)  end 省略

order index 修正前

order/index <div class='buy-btn'> <%# <%= f.submit "購入" ,class:"buy-red-btn" %> <%= link_to '購入', order_item_path(), class: "buy-red-btn" %> </div>

修正後

<div class='buy-btn'> <%= link_to '購入', item_orders_path, method: :post, class: "buy-red-btn" %> </div>

こちらで解決しました。

投稿2020/11/08 10:01

toratail

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問