目前,我正在创建像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"}}
这个目前我逼疯了一点点。我希望你知道为什么会发生这种情况......
哦,这真的很痛!感谢您的回答,它现在正在工作;) – 2011-02-08 15:16:12