Rails アプリケーションに問題があります。3 つのテーブル (スキル、バージョン、およびスキルバージョン) があります。skillversion には、スキルとバージョンからの 2 つの外部キー列があります) 私は skillversion のフォームを持っており、バージョンに関連付けられたスキルを追加するたびに、スキルを追加し、ドロップダウン リストからバージョンを使用する必要があります (バージョン テーブルからリストを取得します)。
問題: フォームを送信するとき。バージョン テーブルに新しいバージョン行を別の ID で追加しています。同様のバージョンが存在する場合、別の行を追加したくありません。skillversion テーブルを送信した後、既存のバージョンの ID を取得し、それを skillversion の version_id 列に追加する必要があります。さらに情報が必要な場合はお知らせください。プロジェクトから関連コードを添付しています。
現在: skillversion テーブルに値が追加されていません
モデル/スキル.rb
class Skill < ActiveRecord::Base
has_many :skillversions
end
モデル/スキルバージョン.rb
class Skillversion < ActiveRecord::Base
belongs_to :skill
belongs_to :version
end
モデル/バージョン.rb
class Version < ActiveRecord::Base
has_many :skillversions
end
controllers/skillversions_controller.rb
def create
@version = Version.find(:number)
@skill = Skill.new(params[:skill].permit(:name))
if @skill.save
@skillversion = Skillversion.new(params[:skillversion].permit(:version_id, :isActive))
@skillversion.skill = @skill
@skillversion.version = @version
if @skillversion.save
redirect_to skillversions_index_path
else
render json: @skillversion.errors, status: :internal_server_error
end
end
render json: @skill.errors, status: :internal_server_error
end
ビュー/スキルバージョン/_form.html.erb
<%= fields_for :skill do |s| %>
<%= fields_for :version do |v| %>
<form class="form-horizontal" id="dform">
<div class="control-group">
<%= s.label :name, 'Skill Name', :class => "control-label" %>
<div class="controls">
<%= s.text_field :name, :class => "controls" %>
</div>
</div>
<div class="control-group">
<%= v.label :number, 'Version', :class => "control-label" %>
<div class="controls" >
<%= v.collection_select :number, Version.find(:all), :id, :number, :class => "dropdownwidth" %>
</div>
</div>
<div class="control-group">
<div class="controls">
<label class="checkbox" >
<%= sv.check_box :isActive, :class => "controls " %>
<%= sv.label :isActive, 'Active?', :class => "checkbox" %>
</label>
<%= sv.submit 'create it!', :class => "metro" %>
</div>
</div>
</form>
<% end %>
<% end %>
前もって感謝します!