ユーザーがプロジェクトをデータベースに入力できるようにしようとしています。フィールドの 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