1

ユーザーがプロジェクトをデータベースに入力できるようにしようとしています。フィールドの 1 つは、そのプロジェクトの複数の技術を入力することを可能にします。

これが私のプロジェクト コントローラーで、new および create アクションです。

def new
    @project = Project.new

@all_technols = Technol.all

@project_technol = @project.projecttechnols.build

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @project }
    end
  end


def create

    @project = Project.new(params[:project])

params[:technols][:id].each do |technol|

if !technol.empty?

    @project.projecttechnols.build(:technol_id => technol)
end
end

end

これは、複数選択テクノロジ ドロップダウンの新しいプロジェクト ビューです。

<%= fields_for(@project_technol) do |ab| %>

<div class="tech">
<%= ab.label "All Tech" %><br/>

<%= collection_select(:technols, :id, @all_technols, :id, :tech, {}, {:multiple => true} ) %>
</div>
<% end %>

現時点では、ユーザーが新しいテクノロジーを入力できるページがあります。しかし、このオプションを新しいプロジェクトの作成ページに移動したいと思います。そこでは、既存のテクノロジーを選択するか、新しいテクノロジーを入力するか、またはその両方を行うことができ、そのプロジェクトで保存します。

編集:質問への変更、およびモデルファイルの追加

ただし、新しいプロジェクトを保存しようとすると、このエラーが発生します。

undefined method `model_name' for NilClass:Class

Extracted source (around line #233):

233: <%= fields_for(@project_technol) do |ab| %>
234: 
235: <div class="tech">
236: <%= ab.label "All Tech" %><br/>

project.rb

class Project < ActiveRecord::Base

  attr_accessible :tech


  has_many :projecttechnols
  has_many :technols, :through => :projecttechnols
end

technol.rb

class Technol < ActiveRecord::Base
  attr_accessible :tech

has_many :projecttechnols
has_many :projects, :through => :projecttechnols
end

projecttechnol.rb

class Projecttechnol < ActiveRecord::Base
  attr_accessible :project_id, :technol_id

belongs_to :technol
belongs_to :project
end

EDIT2:

def new
    @project = Project.new

@all_technols = Technol.all

#@project_technol = @project.projecttechnols.build


@project_technol = Projecttechnol.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @project }
    end
  end
4

1 に答える 1

1

これを参照

変化する

@project.projecttechnols.build

@project.technols.build

次のモデル宣言があると仮定します

project.rb

has_many :technols

テクノルズ.rb

belongs_to :project_id
于 2012-09-27T10:11:50.460 に答える