我是 Rails 的新手,我在尝试使用它们之间具有 HABTM 关联的模型时遇到了巨大的困难。
这些是我的模型:
挑战.rb:
class Challenge < ActiveRecord::Base
has_and_belongs_to_many :skills
attr_accessible :description, :name, :relevant_content, :solutions, :skills
end
技能.rb:
class Skill < ActiveRecord::Base
has_and_belongs_to_many :challenges
attr_accessible :name
end
我还使用以下迁移创建了一个名为 challenges_skills 的连接表:
class CreateChallengesSkills < ActiveRecord::Migration
def up
create_table :challenges_skills, :id => false do |t|
t.integer :challenge_id
t.integer :skill_id
end
end
def down
drop_table :challenges_skills
end
end
我正在使用下面的帮助程序来选择我的挑战所需技能:
<%= collection_select(:challenge, :skills, Skill.all, :id, :name, {}, {:multiple => "true"}) %>
HTML:
<select id="challenge_skills" multiple="multiple" name="challenge[skills][]">
<option value="2">Pesquisa</option>
<option value="3">Senso Critico</option>
<option value="4">Criatividade</option>
<option value="5">Colaboracao</option>
<option value="6">Comunicacao</option>
<option value="7">Proatividade</option>
</select>
这是我的参数哈希:
{"utf8"=>"✓",
"authenticity_token"=>"n0ggK8eE7vjh+qY33lYbNLJtZW6Sz7LyM2IRVbAPwhM=",
"challenge"=>{"description"=>"My description.",
"skills"=>["", "3", "4"],
"name"=>"Test Challenge",
"relevant_content"=>"My relevant_content",
"solutions"=>"My solutions"},
"commit"=>"Create Challenge!"
}
错误: 预期技能(#70228688111620),得到字符串(#14953820)
问题是我不知道如何处理技能散列,将它变成我的挑战 Controller 创建操作中的对象数组。 我知道这应该很简单,但我找不到实用的解决方案。 我想知道如何编写代码以将技能集合与我在挑战 Controller 中的挑战实例相关联。
挑战 Controller #create
def create
@challenge = Challenge.new(params[:challenge])
???
谢谢
最佳答案
实际的答案是将“技能”添加到您接受的参数中:
def approved_params
params.require(:challenge).permit(
:name,
:description,
...
:skills => []
)
end
然后在您的创建/更新中:
def update
@controller.update(approved_params)
end
就是这样
关于html - Rails 如何在 HABTM 模型 Controller 中写入 "Create" Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960573/