Rails 6-可排序

我在Rails 6中遇到HTML可排序更新的问题 我想通过网页拖放图像,效果很好,但是,当我想更新顺序时,控制台日志中出现404 not found错误,并且find ID也出现错误。 顺便说一下,我将此脚本用于可排序的HTML https://github.com/jordanhudgens/devcamp-portfolio/blob/master/app/assets/javascripts/html.sortable.js

控制器:

class PortfoliosController < ApplicationController
  before_action :set_portfolio_item,only:[:edit,:show,:update,:destroy]
  layout "portfolio"
  access all: [:show,:index,:angular],user: {except: [:destroy,:new,:create,:edit,:sort]},site_admin: :all
    def index
        # You can filter what you want to show in protfolio
        # Portfolio.where(subtitle: "Angular")
        # You can define it in models and call the method here
        # It must create on Portfolio.rb in models
        # You can create scope too on models and call
        @portfolio_items = Portfolio.by_position
    end
    def angular
      @angular_portfolio_items = Portfolio.angular
    end
    def sort
      params[:order].each do |key,value|
        Portfolio.find(value[:id]).update(position: value[:position])
      end
      head :ok
    end
    def new
      @portfolio_item = Portfolio.new
      3.times { @portfolio_item.technologies.build }
    end
    def create
      @portfolio_item = Portfolio.new(portfolio_params)
        respond_to do |format|
        if @portfolio_item.save
          format.html { redirect_to portfolios_path,notice: 'Portfolio was successfully created.' }
        else
          format.html { render :new }
        end
      end
      end
    def edit
    end
    def update
      respond_to do |format|
        if @portfolio_item.update(portfolio_params)
          format.html { redirect_to portfolios_path,notice: 'The record was successfully updated.' }
        else
          format.html { render :edit }
        end
      end
    end
    def show
    end
    def destroy
      # Perform the lookup
      # Destroy/delete the record
      @portfolio_item.destroy
      #Redirect
      respond_to do |format|
      format.html { redirect_to portfolios_url,notice: 'Portfolio was successfully deleted!.' }
    end
  end
    private
    def portfolio_params
      params.require(:portfolio)
    end
    def set_portfolio_item
      @portfolio_item = Portfolio.find(params[:id])
    end
    end

这是我的路线。rb

Rails.application.routes.draw do
  devise_for :users,path: '',path_names: { sign_in: 'login',sign_out: 'logout',sign_up: 'register' }
  resources :portfolios,except: [:show] do
    put :sort,on: :collection
  end
  get 'portfolio/:id',to: 'portfolios#show',as: 'portfolio_show'
  get 'angular-items',to: 'portfolios#angular'
  # we can pass anything here after get
  get 'about',to: 'pages#about'
  get 'contact',to: 'pages#contact'
  resources :blogs do
    member do
      get :toggle_status
    end
  end
  resources :posts
  root to: 'pages#home'
  # For details on the DSL available within this file,see https://guides.rubyonrails.org/routing.html
end

这是我的HTML可排序的CoffeeScript

ready = undefined
set_positions = undefined

set_positions = ->
  $('.card').each (i) ->
    $(this).attr 'data-pos',i + 1
    return
  return

ready = ->
  set_positions()
  $('.sortable').sortable()
  $('.sortable').sortable().bind 'sortupdate',(e,ui) ->
    updated_order = []
    set_positions()
    $('.card').each (i) ->
      updated_order.push
        id: $(this).data('id')
        position: i + 1
      return
    $.ajax
      type: 'PUT'
      url: '/portfolios/sort'
      data: order: updated_order
    return
  return

$(document).ready ready

感谢您的帮助!

zzf200215053 回答:Rails 6-可排序

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3119768.html

大家都在问