Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails 6拖放(可排序)_Javascript_Ruby On Rails_Ruby_Ruby On Rails 6 - Fatal编程技术网

Javascript Rails 6拖放(可排序)

Javascript Rails 6拖放(可排序),javascript,ruby-on-rails,ruby,ruby-on-rails-6,Javascript,Ruby On Rails,Ruby,Ruby On Rails 6,我在rails 6中的HTML可排序更新有问题。我在网页上拖放一些公文包图像,效果很好,但当我想用更新的位置更新网页时,我得到了NoMethodError(未定义的方法'each'表示nil:NilClass): 我使用这个脚本进行HTML排序 投资组合控制人: class PortfoliosController < ApplicationController before_action :set_portfolio_item, only: [:edit, :show,:upd

我在rails 6中的HTML可排序更新有问题。我在网页上拖放一些公文包图像,效果很好,但当我想用更新的位置更新网页时,我得到了NoMethodError(未定义的方法'each'表示nil:NilClass):

我使用这个脚本进行HTML排序

投资组合控制人:

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, :update, :edit]}, site_admin: :all

    def index
        @portfolio_items = Portfolio.by_position
    end

    def sort
        params[:order].each do |key, value|
          Portfolio.find(value[:id]).update(position: value[:position])
        end

        head :ok
    end

    def angular
        @angular_portfolio_items = Portfolio.angular        
    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: 'Your Portfolio item is now live.' }
            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 successfully updated.' }
            else
                format.html { render :edit }
            end
        end
    end

    def show
    end

    def destroy
        #Destroy/delete the record
        @portfolio_item.destroy

        #Redirect
        respond_to do |format|
          format.html { redirect_to portfolios_url, notice: 'Record was removed' }
        end
    end

    private

    def set_portfolio_item
        @portfolio_item = Portfolio.find(params[:id])
    end

    def portfolio_params
        params.require(:portfolio).permit(:title, 
                                          :subtitle, 
                                          :body, 
                                          technologies_attributes: [:name]
                                        )
    end
end
这是我的portfolio.js:

var ready, set_position;

ready = void 0;

set_position = void 0;

set_position = function() {
  $(".card").each(function(i) {
    $(this).attr('data-pos', i + 1);
  });
};

ready = function() {
  set_position();
  $('#sortable').sortable();
  $('#sortable').sortable().bind('sortupdate', function(e, ui) {
    var updated_order;
    updated_order = [];
    set_position();
    $(".card").each(function(i) {
      updated_order.push;
      ({
        id: $(this).data('id'),
        position: i + 1
      });
    });
    $.ajax({
      type: 'PUT',
      url: '/portfolios/sort',
      data: {
        order: updated_order
      }
    });
  });
};

$(document).ready(ready);
_公文包_item.html.erb:

<div class="card" data-id="<%= portfolio_item.id %>">
    <%= image_tag portfolio_item.thumb_image unless portfolio_item.thumb_image.nil? %>
    <p class="card-text">
        <span>
            <%= link_to portfolio_item.title, portfolio_show_path(portfolio_item) %>
        </span>
        <%= portfolio_item.subtitle %>
    </p>
</div>


谢谢你的帮助

我唯一看到each语句的地方是PortfoliosController的sort方法

params[:order]。每个
您需要设置参数[:order],或者通过检查是否已设置来防止发生此错误。您可以使用“保存导航”操作符:

params[:order]&每个
或者您可以检查order参数是否设置为present?方法

如果参数[:order]。是否存在?
参数[:顺序]&每个

现在终端中没有显示任何错误,但数据库仍然没有使用更新的位置进行更新。
<div class="card" data-id="<%= portfolio_item.id %>">
    <%= image_tag portfolio_item.thumb_image unless portfolio_item.thumb_image.nil? %>
    <p class="card-text">
        <span>
            <%= link_to portfolio_item.title, portfolio_show_path(portfolio_item) %>
        </span>
        <%= portfolio_item.subtitle %>
    </p>
</div>