Ich bin relativ neu in Rails und habe enorme Schwierigkeiten, mit Modellen zu arbeiten, die HABTM-Verbindungen zwischen sich haben.
Dies sind meine Modelle:
challenge.rb:
class Challenge < ActiveRecord::Base
has_and_belongs_to_many :skills
attr_accessible :description, :name, :relevant_content, :solutions, :skills
end
skill.rb:
class Skill < ActiveRecord::Base
has_and_belongs_to_many :challenges
attr_accessible :name
end
Ich habe auch eine Verbindungstabelle namens challenges_skills erstellt, die die folgende Migration verwendet:
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
Und ich verwende den untenstehenden Helper, um die benötigten Fähigkeiten für meine Challenge auszuwählen:
<%= collection_select(:challenge, :skills, Skill.all, :id, :name, {}, {:multiple => "true"}) %>
HTML:
Pesquisa
Senso Critico
Criatividade
Colaboracao
Comunicacao
Proatividade
Hier ist mein Params-Hash:
{"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!"
}
Fehler: Skill(#70228688111620) erwartet, aber String(#14953820) erhalten
Das Problem ist, dass ich nicht weiß, wie ich den Skills-Hash verarbeiten soll, um ihn in ein Objektarray innerhalb meiner challenges controller create-Aktion umzuwandeln. Ich weiß, dass es etwas Einfaches sein sollte, aber ich finde keine praktische Lösung. Ich möchte wissen, wie ich den Fähigkeiten-Sammlung mit meiner Challenge-Instanz im Challenges-Controller verknüpfen kann.
ChallengesController#create
def create
@challenge = Challenge.new(params[:challenge])
???
Danke