0

我的 Rails 应用程序有问题。我有 3 个表(技能、版本和技能版本)。Skillversion 有来自技能和版本的 2 个外键列)我有一个技能版本表单,每次添加与版本关联的技能时,它应该从下拉列表中添加一个技能并使用版本(从版本表中获取列表)。

问题:当我提交表单时。它在版本表中添加一个具有不同 id 的新版本行。如果存在类似版本,我不希望它添加不同的行。提交技能版本表后,应该获取现有版本的id并将其添加到技能版本中的version_id列。如果您需要更多信息,请帮助并告诉我。我正在附加项目中的相关代码。

现在:它不会在技能版本表中添加任何值

模型/技能.rb

class Skill < ActiveRecord::Base
    has_many :skillversions
end

模型/skillversion.rb

class Skillversion < ActiveRecord::Base
belongs_to :skill
belongs_to :version
end

模型/版本.rb

class Version < ActiveRecord::Base
    has_many :skillversions
end

控制器/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