Javascript Rails 6拖放(可排序)
我在rails 6中的HTML可排序更新有问题。我在网页上拖放一些公文包图像,效果很好,但当我想用更新的位置更新网页时,我得到了NoMethodError(未定义的方法'each'表示nil:NilClass): 我使用这个脚本进行HTML排序 投资组合控制人: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
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>