0

最近、チェックボックスのリストを並べ替えるのに助けを求めました。Rubyon Rails:チェックボックスタグを並べ替えます

私は良い答えを見つけて立ち去り、コードを変更しました。これから、

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

これに、

<div class="tech" STYLE="text-align: left;">
<b>Technologies:</b>
<style>
    .split { text-align:left; }
</style>


<p><ul> 

<% @all_technols.each do |technol| %> 



<li class="split"> 
<%= check_box_tag "project[technol_ids][]", technol.id,  @project.technols.include?(technol) %> 
<%= technol.tech %> 
</li> 

<% end %>
</ul> 
</p> 

プロジェクトコントローラのアクションは次のようになります。

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

        @all_technols = Technol.order('tech ASC') 

        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

ユーザーが新しいプロジェクトを入力し、コードにvalidates_presence_ofまたはvalidates_format_ofがフラグを立てた場合、エラーメッセージが表示されず、代わりに次のエラーメッセージが表示されることに気付きました。

NoMethodError in Projects#create 
line #256 raised: 
undefined method `each' for nil:NilClass 

Extracted source (around line #256): 
253: 
254: <p><ul> 
255: 
256: <% @all_technols.each do |technol| %> 
257: 
258: 
259:

テクノロジーの並べ替えと関係があるはずですが、修正が見つからないようです。うまくいけば、誰かが私がどこで間違っているのかを見ることができます。前もって感謝します。

編集

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
4

1 に答える 1

3

コントローラのcreateメソッド、または送信を処理するアクションの名前が何であれ、ビューを@all_technolsレンダリングする前にもう一度入力するようにしてくださいnew。そうしないと、このエラーが発生します。

したがって、createたとえばアクションでは:

else

  format.html { @all_technols = Technol.order('tech ASC'); render action: "new" }
  format.json { render json: @project.errors, status: :unprocessable_entity }
end
于 2012-11-16T13:41:47.827 に答える