2011-02-08 84 views
4

目前,我正在创建像Rails 3中的“体育管理和结果收集应用程序”。在这个应用程序中,我需要创建几个练习本身可以有多种“结果类型”(心脏,距离以km计,重新排序......)。而且应该可以按照我的首选顺序排列结果类型。所以,这是一种古典的多对多关系。“协会期望,得到字符串”与多对多协会

我想出了以下迁移:

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 

,与此formtastic代码很好地工作:

<%= 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 %> 

的问题是在这里,与此代码我不能resulttypes排序和每个练习只能有一次结果类型。 所以我改变了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) expected, got String(#-608366078)

提交的参数是:

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

这个目前我逼疯了一点点。我希望你知道为什么会发生这种情况......

回答

5

这是一个典型的错误:设置ID你必须使用setter association_ids=,Rails期望association=的对象数组。所以你应该写:

<%= f.select :resulttypes_ids, .... %> 
+0

哦,这真的很痛!感谢您的回答,它现在正在工作;) – 2011-02-08 15:16:12