0
こんにちは私はfindメソッドを使用してスキルを更新しようとしています。私は新しいスキルを作成することができますが、すでに存在するスキルを更新しようとするとスキルを更新しますが、同じデータでスキルが重複して作成されます。メソッドを作成して重複を作成する
def create
@project = Project.find params[:project_id]
@skills_required = @project.skills_requireds.new(skills_required_params)
skills = SkillsRequired.where(skills_required_params.slice(:skill_id)).first_or_create
skills.update(skills_required_params)
respond_to do |format|
if @skills_required.save
format.html{ redirect_to @project, notice: "Skills required added for #{@project.projectName}" }
else
format.html{ redirect_to @project, notice: "Something went wrong, unable to update required skills " }
end
end
end
フォーム:
<div class="section">
<div class="top-border left"></div>
<div class="top-border right"></div>
<h3> Skill Required</h3>
<%= form_for([@project, SkillsRequired.new]) do |f| %>
<div class="field">
<%= f.label :skill_id %><br>
<%= f.collection_select :skill_id, Skill.all, :id, :skillType, :prompt => "Select Skill" %>
</div>
<div class="field">
<%= f.label :numWorkers %><br>
<%= f.number_field :numWorkers %>
</div>
<div class="field">
<%= f.label :skillLevel %><br>
<%= f.text_field :skillLevel %>
</div>
<%=f.submit "Add Skill" %>
<%end%>
</div>
私はskills_requiredは私のコントローラに破壊する追加しようとしたが、これは私が新しいスキルを追加することはできません。どんな助けもありがたいです
私はあなたの問題の根本を推測しているこれらの変数であります両方とも '@ skills_required'と' skills'を保存しています。 – burnettk
このメソッドをcreateメソッドで呼び出すことは可能ですか?スキルが保存される前にスキルが存在するかどうかを確認する方法はありますか? – Parks
ある変数に '.new(...)。save'を呼び出し、別の変数に' first_or_create'を呼び出しています。もちろん、それは2つのレコードを作成するつもりです:) –