«Ассоциация ожидала, получил строку» с ассоциацией «многие ко многим» - PullRequest
4 голосов
/ 08 февраля 2011

В настоящее время я создаю что-то вроде "спортивного приложения для управления и сбора результатов" в Rails 3. В этом приложении мне нужно создать несколько упражнений, которые сами по себе могут иметь несколько «типов результатов» (сердечный ритм, расстояние вкм, повторы, ...).И должно быть возможно расположить типы результатов в моем предпочтительном порядке.Итак, это классическое отношение «многие ко многим».

Я придумал следующие миграции:

    class CreateExercises < ActiveRecord::Migration
      def self.up
        create_table :exercises do |t|
          t.integer :user_id
          t.string :name
          t.text :beschreibung
          t.integer :resulttype_id
          t.boolean :active, :default => true
          t.timestamps
        end
      end
      def self.down
        drop_table :exercises
      end
    end

    class CreateResulttypes < ActiveRecord::Migration
      def self.up
        create_table :resulttypes do |t|
          t.string :name
          t.string :einheit
          t.text :beschreibung

          t.timestamps
        end
      end

      def self.down
        drop_table :resulttypes
      end
    end

    class CreateExercisesResulttypesJoin < ActiveRecord::Migration
      def self.up
        create_table :exercises_resulttypes, :id => false do |t|
          t.integer "exercise_id"
          t.integer "resulttype_id"
        end
        add_index :exercises_resulttypes, ["exercise_id", "resulttype_id"]
      end

      def self.down
        drop_table :exercises_resulttypes
      end
    end

, который прекрасно работает с этим формальным кодом:

    <%= semantic_form_for(@exercise) do |f| %>        
      <%= f.inputs do %>
        <%= f.input :name %>
        <%= f.input :beschreibung %>
        <%= f.input :resulttype %>
        <%= f.input :active %>
      <% end %>
      <%= f.buttons %>
    <% end %>

Проблема здесь в том, что с этим кодом я не могу отсортировать типы результатов, и каждое упражнение может иметь каждый тип результата только один раз.Поэтому я изменил код формы formtastic: resulttype на этот (кроме кода jquery):

    <div id="conn_ctrl" class="float_left center">
            <div class="float_left center">
                <%= f.select :resulttypes, @resall.collect{|d| [d.name,d.id]}.sort, {}, { :multiple => true, :class => "conn_select" } %><br>
            </div>
            <div class="float_left center">
                <%= f.select :resulttypes, '', {}, { :multiple => true, :id => "exercise_resulttypes_save", :class => "conn_select" } %><br>
            </div>
            <div style="clear: both"></div>
            <%= tag("input", { :type => "button", :id => "remove", :class => "dualbuttons", :name => "", :value => "<<" }, false) %>
            <%= tag("input", { :type => "button", :id => "add", :class => "dualbuttons", :name => "", :value => ">>" }, false) %>
            <%= tag("input", { :type => "button", :id => "up", :class => "dualbuttons", :name => "", :value => "Up" }, false) %>
            <%= tag("input", { :type => "button", :id => "down", :class => "dualbuttons", :name => "", :value => "Down" }, false) %><br>
        </div>
        <div style="clear: both"></div>

Теперь у меня есть «Двойной список», и я могу добавить упражнения к этой конкретной тренировке несколько раз и упорядочить какМне это нравится.НО, когда я отправляю форму, я получаю эту ошибку, и я понятия не имею, что это значит:

Resulttype (# - 614051528) ожидаемый, получил String (# - 608366078)

Представленные параметры:

    {"commit"=>"Create Exercise",
     "authenticity_token"=>"v1l9zfxdxIJbdjZx6SsZ5tGuKMrlioBg+C9orSmVarA=",
     "utf8"=>"✓",
     "exercise"=>{"name"=>"dddd",
     "beschreibung"=>"ddddd",
     "resulttypes"=>["5",
     "3",
     "1"],
     "active"=>"1"}}

В настоящее время это немного сводит меня с ума.Я надеюсь, вы знаете, почему это происходит ...

1 Ответ

5 голосов
/ 08 февраля 2011

Это типичная ошибка: для установки идентификаторов необходимо использовать установщик association_ids=, Rails ожидает массив объектов для association=.Поэтому вы должны написать:

<%= f.select :resulttypes_ids, .... %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...