【问题标题】:Sorting multiple models in one controller在一个控制器中对多个模型进行排序
【发布时间】:2019-11-13 14:02:27
【问题描述】:

我正在使用 Ruby on Rails 5.2.3 和 Mongoid 7.0 我需要能够在一个控制器中对多个模型(项目和文本)进行排序。 现在只有 Item 或 Text 被排序,Position 必须是相互关联的。

class UsersController < ApplicationController
  def sort
    params[:item].each_with_index do |id, index|
      Item.where(id: id).update_all(position: index + 1)
    end
    head :ok
  end
  def admin
    @user_items = @user.user_feed
  end
end

admin.html.erb

<div id="items" data-url="<%= sort_users_path %>">
  <%= render partial: 'users/user_item', collection: @user_items %>
</div>

_user_item.html.erb

<% if user_item[:title].present? %>
  <div id="item_<%= user_item[:id] %>">
    <%= user_item[:position] %>
  </div>
<% end %>

<% if user_item[:text].present? %>
  <div id="item_<%= user_item[:id] %>">
    <%= raw user_item[:position] %>
  </div>
<% end %>

用户.rb

def user_activity
    activity_items = []

    items.each do |item|
      activity_item = {}
      activity_item[:id] = item.id
      activity_item[:url] = item
      activity_item[:title] = item.title
      activity_item[:position] = item.position
      activity_item[:item_link] = item.url

      activity_items << activity_item
    end

    texts.each do |text|
      activity_item = {}
      activity_item[:id] = text.id
      activity_item[:url] = text
      activity_item[:text] = text.text
      activity_item[:position] = text.position

      activity_items << activity_item
    end

    activity_items.sort_by! { |activity_item| activity_item[:position] }
    activity_items
  end



  def user_feed
    activity_items = user_activity

    activity_items.sort_by! { |activity_item| activity_item[:position] }
    activity_items
  end

【问题讨论】:

    标签: ruby-on-rails mongoid jquery-ui-sortable


    【解决方案1】:

    只需添加Text.where(id: id).update_all(position: index + 1)

    def sort
      params[:item].each_with_index do |id, index|
        Item.where(id: id).update_all(position: index + 1)
        Text.where(id: id).update_all(position: index + 1)
      end
      head :ok
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2012-11-17
      相关资源
      最近更新 更多