Ich habe einen Controller Orders. Dieser Controller führt basierend auf der POST-Anforderung verschiedene Aktionen aus. Wenn ein Benutzer ein Produkt kauft, geht es zu seinem Vorrat. Daher können nur Produkte auf Lager verkauft werden. Die Tabelle hat eine Spalte product_id. Einfach gesagt, wenn ein Benutzer auf products/product_id Seite bestellt werden muss, muss ein Kauf sein, wenn auf Aktien/stock_id Seite Auftrag verkauft werden muss.Ruby on Rails: Wenn Else basierend auf params [: Beispiel]
routes.rb:
resources :products, only: [:index, :show] do
resources :orders, only: [:create]
end
resources :stocks, only: [:index, :show] do
resources :orders, only: [:create]
end
Rake Routen:
products_orders POST /products/:product_id/orders(.:format) orders#create
products_index GET /products(.:format) products#index
product GET /products/:id(.:format) products#show
stocks_orders POST /stocks/:stock_id/orders(.:format) orders#create
stocks_index GET /stocks(.:format) stocks#index
stock GET /stock/:id(.:format) stocks#show
Meine Models:
class Order < ApplicationRecord
belongs_to :product
end
class Product < ApplicationRecord
has_many :orders
has_many :stocks
end
class Stock < ApplicationRecord
belongs_to :product
end
Also tat ich dies:
class OrdersController < ApplicationController
def create
if params[:product_id].present?
order.type = 'buy'
elsif params[:stock_id].present?
order.type = 'sell'
end
end
end
Ist dieser Code sicher? Es gibt einen Weg, es besser zu machen? Ist es richtig, diesen Code auf params [: product_id] und params [: stock_id] zu verwenden?
if params[:product_id].present?
order.type = 'buy'
elsif params[:stock_id].present?
order.type = 'sell'
end
Ist in irgendeiner Weise möglich, eine params in der Anfrage zu injizieren? Zum Beispiel inject params [: product_id] zu stoks/stock_id/orders, die etwas schaden? Zum Beispiel mit Curl. Vielen Dank.
Duplikat von https://stackoverflow.com/questions/46993664/rails-create-action-with-if-else-based-on-paramsexample?rq=1 fragte y'day! –