使用rails 4的排名模型

时间:2013-12-04 05:12:20

标签: jquery ruby-on-rails ajax jquery-ui ruby-on-rails-4

我一直在使用ranked model并跟随此sortable tables tutorial

我把头发拉过来,任何人都可以做的事情都很棒!

我有Decks has_many Cards。在甲板编辑页面上,我正在尝试对自己的卡片进行排序。

card.rb

belongs_to :deck
include RankedModel
ranks :row_order, :with_same => :deck_id

的routes.rb

resources :decks do 
  post :sort, on: :collection
  resources :cards
end

decks_controller.rb

def sort
  @deck = Deck.find(params[:id])
  @deck.update_attributes(deck_params)
  @deck.save
  render nothing: true
end

def deck_params
  params.require(:deck).permit(:name, :id, :cards_attributes => [:id, :question, :answer, :deck_id, :_destroy, :row_order, :row_order_position])
end

jquery的

$.ajax({
  type: 'POST',
  url: $(this).data('update_url'),
  dataType: 'json',
  data: { id: deck_id, deck: { cards_attributes: { row_order_position: position } }}

这一切都在Rails 4上。 我认为问题是我如何发布数据。

我已经在卡片上检查了row_order,并且它已被设置。我似乎无法理解如何通过嵌套cards_attributes的ajax传递信息。

我也不确定为什么教程会在ajax帖子中显示row_order_position: position,当时我认为它只是row_order: position

1 个答案:

答案 0 :(得分:1)

这里有几件事(我打算写评论,但作为答案会更容易阅读):


它是否像你想要的那样工作?

我查看了你的代码,看起来你正试图改变套牌的position,而你的ajax中没有回调

这是你想要的吗?就个人而言,我会创建一个名为DeckPosition的单独模型,您可以这样使用:

#app/models/deck_position.rb
Class DeckPosition < ActiveRecord::Base
    belongs_to :deck, :class_name => 'Deck'
    belongs_to :card, :class_name => 'Card'
end

#app/models/deck.rb
Class Deck < ActiveRecord::Base
    has_many :card_positions, :class_name => 'DeckPosition'
    has_many :cards, :class_name => 'Card', :through => :card_positions

    accepts_nested_attributes_for :cards
end

#app/models/card.rb
Class Card < ActiveRecord::Base 
    has_many :deck_positions, :class_name => 'DeckPosition'
    has_many :decks, :class_name => 'Deck', :through => :deck_positions
end

然后我会在连接模型中包含属性“order”:

deck_positions table
id | deck_id | card_id | row_order_position | created_at | updated_at

这可能是完全错误的,但从您的问题来看,似乎您可以从中受益


嵌套属性

您似乎将嵌套属性传递给您的卡片模型,但您的代码中没有任何对此的引用?我已在我自己的代码中将适用的代码添加到Deck模型中;所以也许你会想看看那个?


<强>分拣

我询问您的Ajax的原因之一是您向服务器发送请求,但似乎没有处理它?这很重要,因为虽然我之前没有使用过排名宝石,但似乎您希望能够对应用程序的某些重要方面进行排序?你希望如何处理它们?