1

ユーザーが新しいプロジェクトを送信できるアプリがあります。提出した後、提出したばかりのプロジェクトを編集するオプションがあります。[編集]をクリックすると、フォームが再度表示され、以前に入力したすべてのデータが表示されます。

私の問題は、ユーザーが多くのテクノロジーを選択できるフィールドの1つにあります。これは、テーブルとテーブルのProjecttechnol間のリンクを保持するという別のテーブルにリンクされています。ユーザーが編集ボタンをクリックしても、そのプロジェクトで保持されていたすべてのテクノロジーが表示されるわけではありません。ユーザーが新しいテクノロジーをクリックして保存すると、新しいテクノロジーが保存され、古いテクノロジーはそのまま残ります。TechnolProject

テクノロジーに関する私の編集ビュー:

<%= fields_for(@project_technol) do |ab| %>
  <%= ab.label "Choose Technologies"%> </br>
  <%= collection_select( :technols, :id, Technol.all, :id, :tech, {}, {:multiple => true } ) %>
<% end %>

My Project Controller:新規、編集、作成、更新のアクション

def new

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

  @all_technols = Technol.all
  tech_ids = params[:technols][:id].reject(&:blank?) unless params[:technols].nil?


  @project_technol = @project.projecttechnols.build

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

def edit
    @project = Project.find(params[:id])


@project_technol = @project.projecttechnols.build


  end

def create  
    @project = Project.new(params[:project])
    @project.client = params[:new_client] unless params[:new_client].blank?
    @technol.tech = params[:new_tech] unless params[:new_tech].blank?
    @project.role = params[:new_role] unless params[:new_role].blank?

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


    if !tech.empty?

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

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

def update
    @project = Project.find(params[:id])
    @project.client = params[:new_client] unless params[:new_client].blank?
    @technol.tech = params[:new_tech] unless params[:new_tech].blank?
    @project.role = params[:new_role] unless params[:new_role].blank?

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

     if !tech.empty?
     @project_technol = @project.projecttechnols.build(:technol_id => tech) 

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

私はレールに慣れていないので、事前に感謝します。

更新:これが私のプロジェクトモデルです

class Project < ActiveRecord::Base
  attr_accessible  :fullname, :edited_first_name, :edited_last_name, :first_name, :last_name, :business_div, :client, :customer_benefits, :edited_date, :end_date, :entry_date, :financials, :industry, :keywords, :lessons_learned, :project_name, :project_owner, :role, :start_date, :status, :summary, :tech , :technols, :technol_tokens

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

accepts_nested_attributes_for(:technols)

UPDATE2

パラメータ:

{"utf8"=>"✓",
 "_method"=>"put",
 "authenticity_token"=>"+Fdh61iVz2IqZ+bNQz9SIa5ly7nNXaiCEr28hVWUxpM=",
 "project"=>{"project_name"=>"Beverly",
 "status"=>"Completed",
 "client"=>"Qtjpa",
 "business_div"=>"Ecbly",
 "project_owner"=>"Qpzrv",
 "start_date"=>"2012-10-15",
 "edited_date"=>"2012-10-08",
 "projecttechnols"=>{"id"=>["",
 "41"]},
 "role"=>"Ozeoe",
 "industry"=>"Wjfiq",
 "summary"=>"Eypriw lorem ipsum dolor sit amet,
 consectetur adipisicing elit,
 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
 "lessons_learned"=>"Kbjuhy lorem ipsum dolor sit amet,
 consectetur adipisicing elit,
 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
 "customer_benefits"=>"Fsonlw lorem ipsum dolor sit amet,
 consectetur adipisicing elit,
 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",,
 "keywords"=>"Bwdtm"},
 "new_client"=>"",
 "new_business_div"=>"",
 "new_project_owner"=>"",
 "new_role"=>"",
 "new_industry"=>"",
 "commit"=>"Save Edit",
 "id"=>"103"}
4

2 に答える 2

0
<%= fields_for(@project_technol) do |ab| %>
  <%= ab.label "Choose Technologies"%> </br>
  <%= collection_select( :technols, :id, Technol.all, :id, :tech, {}, {:multiple => true } ) %>
<% end %>

次のようになります:

<%= f.fields_for(:projecttechnols) do |ab| %>
  <%= ab.label "Choose Technologies"%> </br>
  <%= ab.collection_select(:id, Technol.all, :id, :tech, {}, {:multiple => true } ) %>
<% end %>

ただし、fform_forブロックに使用した引数に置き換える必要があります。好き:

form_for(@project) do |f|

またProject、ネストされたモデルとの正しい関係が含まれていることを確認してください。accepts_nested_attributes_for

于 2012-10-08T10:16:20.657 に答える
0

で設定:multiple => trueしましたcollection_select

于 2012-10-08T10:20:01.607 に答える