ユーザーが Projects というテーブルでプロジェクトを入力および編集できるアプリがあります。フィールドの 1 つで、そのプロジェクトの技術を確認できます。これらは Technols という別のテーブルに格納され、テーブル間の関係は Projecttechnols と呼ばれます。
例として、tech1、tech2、tech3 という多くのテクノロジを含むプロジェクト X があります。プロジェクトを編集する場合は、テクノロジーをプロジェクトから削除または追加し、プロジェクトを自由に更新できます。しかし、すべてのプロジェクトをプロジェクトから外そうとすると、私の問題が始まります。これを試してみても、何も変わらず、テクノロジーは同じままです。
テクノロジーなしで新しいプロジェクトを作成しても問題ありません。そのプロジェクトに戻ってテクノロジーを挿入して編集できますが、テクノロジーを追加してもう一度編集し、それらをすべて削除しようとします。何も起こりません。
プロジェクトコントローラーからの私の新しい、編集、作成、および更新アクションは次のとおりです。
def new
@project = Project.new
@technol = Technol.new(params[:tech])
@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
# GET /projects/1/edit
def edit
@project = Project.find(params[:id])
@project_technol = @project.projecttechnols.build
puts @project.inspect
puts @project.technols.inspect
end
# POST /projects
# POST /projects.json
def create
@project = Project.new(params[:project])
@project.client = params[:new_client] unless params[:new_client].blank?
@project.role = params[:new_role] unless params[:new_role].blank?
@project.industry = params[:new_industry] unless params[:new_industry].blank?
@project.business_div = params[:new_business_div] unless params[:new_business_div].blank?
if !params[:technols].nil?
params[:technols][:id].each do |tech|
if !tech.empty?
@project_technol = @project.projecttechnols.build(:technol_id => tech)
end
end
end
respond_to do |format|
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render json: @project, status: :created, location: @project }
else
format.html { render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
# PUT /projects/1
# PUT /projects/1.json
# PUT /projects/1
# PUT /projects/1.json
def update
@project = Project.find(params[:id])
puts @project.inspect
puts @project.technols.inspect
params['project'][:client] = params[:new_client] unless params[:new_client].blank?
params['project'][:role] = params[:new_role] unless params[:new_role].blank?
params['project'][:industry] = params[:new_industry] unless params[:new_industry].blank?
params['project'][:business_div] = params[:new_business_div] unless params[:new_business_div].blank?
respond_to do |format|
if @project.update_attributes(params[:project])
format.html { redirect_to @project, notice: 'Project was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
技術ビットの編集ビューは次のとおりです。
<div class="tech" STYLE="text-align: left;">
<b>Technologies:</b>
<style>
.split { text-align:left; }
</style>
<p>
<ul>
<% for technol in Technol.all %>
<li class="split">
<%= check_box_tag "project[technol_ids][]", technol.id, @project.technols.include?(technol) %>
<%= technol.tech %>
</li>
<% end %>
</ul>
</p>
私はRailsを初めて使用するので、非常に単純なものかもしれません。すべての助けをいただければ幸いです。前もって感謝します。