Я работаю над приложением Flex / Rails. У меня есть модель с has_many :through
ассоциацией, которую я пытаюсь создать. Я работаю с флажками на страницах с обычными рельсами, с помощью блогов, таких как флажки «Пол много через *» Пола Барри . Теперь я пытаюсь заставить Flex делать то же самое, и у меня возникают трудности с отправкой эквивалентных пар флажков в служебном вызове Flex.
Модель выглядит следующим образом:
class PlayerAction < ActiveRecord::Base
belongs_to :player
belongs_to :action_type
has_many :action_cards
has_many :deck_cards, :through => :action_cards
end
Форма на странице рельсов:
<% form_for PlayerAction.new do |f| %>
<%= f.hidden_field :player_id, {:value => @player.id} %>
<%= f.collection_select(:action_type_id, ActionType.find(:all), :id, :desc) %>
<ul>
<% @player.hand.deck_cards.each do |deck_card| -%>
<li><%= check_box_tag "player_action[deck_card_ids][]", deck_card.id -%><%= deck_card.title %>
<% end -%>
</ul>
<%= f.submit 'Do Action' %>
<% end %>
Это создает параметры, которые в журнале рельсов выглядят так:
Parameters: {"commit"=>"Do Action", "action"=>"create", "controller"=>"player_actions", "player_action"=>{"action_type_id"=>"1", "player_id"=>"9", "deck_card_ids"=>["87", "56"]}}
Используя плагин TamperData в Firefox, параметры выглядят так:
player_action[player_id]=9
player_action[action_type_id]=1
player_action[deck_card_ids][]=87
player_action[deck_card_ids][]=56
commit=Do+Action
и, наконец, мой код Flex для служебного вызова выглядит следующим образом. svcAction
- это mx:HTTPService
, определенный в другом месте. Маршрутизация и URL работают, я сосредотачиваюсь на параметрах здесь:
svcAction.url = "/player_actions.xml";
var params:Object = new Object();
params['player_action[action_type_id]'] = 1;
params['player_action[player_id]'] = 8;
params['player_action[deck_cards_ids][]'] = 37;
params['player_action[deck_cards_ids][]'] = 19;
svcAction.send(params);
В приведенном выше коде player_action[deck_cards_ids][]
пармы перезаписывают друг друга, поэтому отправляется только один со вторым значением. Я также пробовал массивы идентификаторов с
params['player_action[deck_cards_ids]'] = myIdsArray.toString();
и
params['player_action[deck_cards_ids]'] = "[" + myIdsArray.toString() + "]";
но ни один из них не сработал.
Есть предложения?