0

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 %>

前もって感謝します!

4

0 に答える 0