javascript - AngularJS POST update to database in Rails -


i have app uses angularjs orders page, connects via json api sqlite3/ postrgres database in rails. can create , delete orders angular page, i'm having trouble updating column order shipped (a checkbox). when click on checkbox, js console indicates change of shipped value false true, returns error: post ... /orders/1.json 404(not found).

i think problem might code in rails orders_controller.

here code.

index.html.erb

<input type="checkbox" value="order.shipped" ng-click="changeshipped(order)"> 

app.js

// change shipped status via checkbox $scope.changeshipped = function(order) {   order.shipped = !order.shipped;   models.orders.save(order); // returns post... 404 (not found)   console.log(order.shipped);  // indicates true / false } 

orders_controller.rb

class orderscontroller < applicationcontroller   protect_from_forgery   skip_before_action :verify_authenticity_token, if: :json_request?   respond_to :json, :html   load_and_authorize_resource  def index   @user = current_user   @orders = order.all.to_json(:include => [{:product => {:only => :title}}, {:user => {:only => :email}}])   respond_with @orders   end  def show   @order = order.find(params[:id]).to_json(:include => [{:product => {:only => :title}}, {:user => {:only => :email}}])  # def new # end  def create   @order = order.create(order_params)   respond_with @order end  def update   @order = order.find(params[:id])   respond_with @order end  def destroy   respond_with order.destroy(params[:id]) end  protected  def json_request?   request.format.json? end  private def order_params   params.require(:order).permit(:product_id, :user_id, :total, :shipped)   end end 

order model

t.integer "user_id" t.integer "product_id" t.decimal   "total" t.boolean "shipped",    default: false, null: false t.index ["product_id"], name: "index_orders_on_product_id" t.index ["user_id"], name: "index_orders_on_user_id" 

routes.rb

rails.application.routes.draw   devise_for :users, :controllers => { :registrations =>  "user_registrations" }   resources :users   resources :orders, only: [:index, :show, :create, :update, :destroy]    resources :products    resources :comments   end    root 'static_pages#index'    '/search', to: 'static_pages#search'    '/search_results', to: 'products#search_results'    '/about', to: 'static_pages#about'    '/contact', to: 'static_pages#contact'    post 'static_pages/thank_you'    devise_scope :user     '/sign_up', to: 'devise/registrations#new'     '/profile', to: 'devise/registrations#edit'   end    post '/payments/create', to: 'payments#create'   'payments/payment_thank_you', to: 'payments#payment_thank_you' end 

from can tell, seems you're sending post request update action default, rails expecting put or patch request action.

however browser not support real http put or patch request via ajax, trick add, specific _method posted json data.

{_method:'put', order: order_data } ruby on rails - put method on update ajax


Comments

Popular posts from this blog

magento2 - Magento 2 admin grid add filter to collection -

Android volley - avoid multiple requests of the same kind to the server? -

Combining PHP Registration and Login into one class with multiple functions in one PHP file -