0

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

これが私のプロジェクトコントローラーです。新しいアクションと作成アクションです。

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

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

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

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

Showing /home/james/Desktop/webapp/app/views/projects/new.html.erb where line #233 raised:

    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.projecttechnols.build(:technol_id => technol)

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

私は今このエラーを受け取ります:

NoMethodError in Projects#create

undefined method `map' for nil:NilClass

Extracted source (around line #240):

237: <div class="tech">
238: <%= ab.label "All Tech" %><br/>
239: 
240: <%= collection_select(:technols, :id, @all_technols, :id, :tech, {}, {:multiple => true} ) %>
241: </div>
242: <% end %>

編集2

@all_technols=作成アクションのTechnol.all

このエラーが発生しました。

NoMethodError in Projects#show

Showing /home/james/Desktop/webapp/app/views/projects/show.html.erb where line #181 raised:

undefined method `technol' for #<Project:0xb36823c>
Extracted source (around line #181):

178: <h3>Related books</h3>
179: 
180: <ul>
181:   <% @project.technol.each do |technol| %>
182:     <li><%= technol.tech %> <%= link_to "Details", technol_path(technol) %></li>
183:   <% end %>
184: </ul>
4

1 に答える 1

2

アクションcreatenewビューを再度レンダリングしています。ただし、アクション@project_technol内では定義されていませんcreate。このメソッドは、( )で渡された引数に対してメソッドをfields_for呼び出しますが、、以降、そのエラーをスローしています。これを修正するには、アクション内で変更しますmodel_name@project_technol@project_technol = nilcreate

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

@project_technol = @project.projecttechnols.build(:technol_id => technol)
于 2012-09-27T11:29:24.597 に答える