1

ユーザーが新しいプロジェクトを作成できるアプリがあります。新しいプロジェクトの作成フォームでは、フィールドごとに、そのフィールドに入力する新しいデータを作成するオプション、または以前のプロジェクトからデータを選択するオプションがあります。たとえば、新しいクライアント名を入力するか、プロジェクトから既存のクライアントを選択します。以前に入力されたデータベース。

これで、テクノロジーとプロジェクトの間の関係テーブルをセットアップして、ユーザーが複数のテクノロジーを選択して 1 つのプロジェクトに対応できるようにしました。

私の問題は、collection_select に存在しない場合に、より多くのテクノロジを送信できるようにすることです。

これが私の新しい見解です:

<%= stylesheet_link_tag "form" %>


<%= form_for(@project) do |f| %>

<div class="client">
<%= label_tag :new_client, "Client" %><br/>
<%= text_field_tag :new_client, nil, :maxlength => 30 %>
Or
<%= f.select( :client, Project.all.map {|p| [p.client]}.uniq, :prompt => "Select a previous Client") %>
</div>



<%= fields_for(@project_technol) do |ab| %>       
 <%=  text_field_tag :tech, nil, :maxlength => %>        
 <%= ab.label "All Tech"%> </br>
 <%= collection_select( :technols, :id, Technol.all, :id, :tech, {}, {:multiple => true } ) %>
    </div>
    <% end %>

<div class="create_button">
<div class="actions">
    <%= f.submit "Save New Project", :class => "button",  :confirm => "Are you sure you want to save the new project?" %>
  </div>
</div>    
</div> 

<% end %>  

<div class="back_button2">
<%= button_to "Back", projects_path , :class => "button", :method => "get" %>
</div>

そして、ここに私の作成と新しいアクションがあります:

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


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

        if !tech.empty?
        @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

助けていただければ幸いです。私はこの問題に本当に悩まされています。私はレールに慣れていないので、助けようとするときはこれを覚えておいてください。

4

1 に答える 1

0

私があなたの質問を理解したように:

find_or_create_by_name 

DB に何も見つからない場合、新しいレコードが作成されます。初心者に最適なこのスクリーンキャストをチェックしてください:)

また、リファレンス

お役に立てれば。

于 2012-10-05T06:34:37.253 に答える