2017-07-01 6 views
0

Je voudrais soumettre des informations à partir de mes vues en utilisant un contrôleur de commande link_to dont je ne suis pas sûr comment coder.Rails 5 soumettre des données via un lien

Mes modèles

class User < ApplicationRecord 
    has_many :orders 
    has_many :stocks, through: :orders 
end 

class Order < ApplicationRecord 
    belongs_to :user 
    belongs_to :stock 
end 

class Stock < ApplicationRecord 
    has_many :orders 
    has_many :users, through: :orders 
end 

La façon de faire des commandes à partir de la console de rails est

order = Order.new 
user = User.last 
stock = Stock.last 
final = user.orders.create(user_id: user.id, stock_id: stock.id) 

Routes

Rails.application.routes.draw do 
    devise_for :users 
    devise_for :admins 
    get '/history', to: 'orders#history' 

    post '/stocks/:id/', to: 'stocks#order', as: 'order_stock' 

    resources :stocks 
    root 'stocks#index' 
end 

je voudrais avoir un seul lien de app/views/stocks/montrer de soumettre des ordres

Aide avec le lien et les actions du contrôleur serait très reconnaissant. Merci d'avance,

+0

vous pouvez utiliser la gemme de cocon ou si vous préférez, vous pouvez utiliser la forme de modèle imbriquée ryan bates (vous pouvez apprendre à partir de ce lien http://railscasts.com/episodes/196-nested-model-form-revised) – widjajayd

+0

Je voudrais plutôt le faire sans gemmes supplémentaires. – Faisal

Répondre

0

Puisque vous êtes sur le point de create un nouvel objet order; Donc, en utilisant POST comme une méthode HTTP serait plus approprié. Donc,

link_to "Order Now!", order_stock_path(params[:id]), method: :post 

devrait fonctionner je suppose.

See this for more info

Dans stocks_controller

def order 
    stock = current_user.stocks.find(params[:id]) 
    stock.order.create 
    redirect_to stock_path(params[:id]), notice: 'Order created' 
end 

Il devrait ressembler un peu ce

Remarque: Rails envoyer un appel AJAX POST au contrôleur dans ce cas; En cas de succès, il redirigera en conséquence. Le code AJAX sera intégré près du code au lien. Voir dans le navigateur vous-même.

+0

méthode non définie 'order_stock_path 'pour # <# : 0x007f26d6312e88> Vouliez-vous dire? edit_stock_path – Faisal

+0

N'ai-je pas besoin d'un nouvel itinéraire pour cela? – Faisal

+0

J'ai ajouté cette route post '/ stocks /: id /', à: 'stocks # order', comme: 'order_stock' Et maintenant obtenir app/controllers/orders_controller.rb: 11: erreur de syntaxe, inattendue ') 'r) .permit (: id_utilisateur, stock_id :)^ – Faisal