0

私の update.html.erb:

<% @uploads.each do |upload| %>

        <p><%= upload.name %></p>               
        <p class="grey">

    <%= best_in_place upload, :place, type: :select, collection: [ ["Home", "Home"],["Sauna", "Sauna"]]%>  

            </p>    
  <%end%>

コントローラ:

 def show
      @uploads = Upload.all 
  end
  def update
    @uploads = Upload.all
    @upload = Upload.find(params[:id])

    respond_to do |format|
      if @upload.update_attributes(params[:upload])
        format.html { redirect_to @upload, notice: 'Upload was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @upload.errors, status: :unprocessable_entity }
      end
    end
  end

問題は、エラーが発生することです: undefined methodeach' for nil:NilClass` は、コントローラーがオブジェクトを変数 @uploads に渡さないことを意味します。なぜそれをしないのですか、どうすれば修正できますか? 前もって感謝します。

ps。ビューの上部に次のように書くことができます。

<% @uploads=Uploads.all%>

しかし、それは最善の考えではありません。前もって感謝します

4

3 に答える 3

0
<% @uploads.each do |upload| %>

<%end if @uploads.present? %>
于 2013-03-29T10:38:08.670 に答える
0

ルートが RESTful ルートの場合、更新メソッドは HTTP PUT メソッドであり、テンプレートを持つべきではありません。あなたが探しているのは編集アクションです:

def edit
    @uploads = Upload.all
end
于 2013-03-29T10:39:30.043 に答える
0

@katja: あなたのコメントを参照してください。
update は HTTP PUT リクエストです。その中でレコードを取得することはできませんが、edit は get リクエストであり、edit アクションですべてのレコードを取得できます。

edit アクションに before_filter コールバックを追加できます。

before_filter :get_all_uploads, only: [:edit]  

def get_all_uploads  
  @uploads = Upload.all  
end  

そして、あなたの edit.html.erb でできること

<% @uploads.each do |upload| %>

    <p><%= upload.name %></p>               
    <p class="grey">

<%= best_in_place upload, :place, type: :select, collection: [ ["Home", "Home"],["Sauna", "Sauna"]]%>  

        </p>    
  <% end %>
于 2013-03-29T10:49:53.583 に答える