我一直在使用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
。
答案 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的原因之一是您向服务器发送请求,但似乎没有处理它?这很重要,因为虽然我之前没有使用过排名宝石,但似乎您希望能够对应用程序的某些重要方面进行排序?你希望如何处理它们?