0

レクチャー コントローラーの create メソッドを使用して「レクチャー」を作成しようとすると、このエラーが発生します。これは以前は機能していましたが、アプリの他の部分で作業を続けましたが、もちろん戻ってきて、ユーザーがアプリでレク​​チャーを作成しようとすると、何かがこのエラーをスローしています。

私が見落としている小さなものだと確信しています(しばらくして、おそらく休憩する必要があります)...しかし、誰かがなぜこれが起こっているのかを教えていただければ幸いです...教えてください他に何か投稿する必要がある場合は... thx!

私が得るエラー

NoMethodError in LecturesController#create

undefined method `save' for nil:NilClass
Rails.root: /Users/name/Sites/rails_projects/app_name

Application Trace | Framework Trace | Full Trace
app/controllers/lectures_controller.rb:13:in `create'

新しい講義を作成する私の見解

ビュー/講義/new.html.erb

<% provide(:title, 'Start a Lecture') %>

<div class="container">
  <div class="content-wrapper">

    <h1>Create a Lecture</h1>

     <div class="row">
       <div class="span 6 offset3">
         <%= form_for(@lecture) do |f| %>
           <%= render 'shared/error_messages', :object => f.object %>
           <div class="field">
             <%= f.text_field :title, :placeholder => "What will this Lecture be named?" %>
             <%= f.text_area :content, :placeholder => "Describe this Lecture & what will be learned..." %>
           </div>
          <%= f.submit "Create this Lecture", :class => "btn btn-large btn-primary" %>
         <% end %>
       </div>
     </div>
   </div>
 </div>

次に、エラーが発生していると言っているコントローラー

controllers/lectures_controller.rb

class LecturesController < ApplicationController
before_filter :signed_in_user, :only => [:create, :destroy]
before_filter :correct_user,   :only => :destroy

def index
end

def new
  @lecture = current_user.lectures.build if signed_in?
end

def create
  if @lecture.save
   flash[:success] = "Lecture created!"
   redirect_to @lecture
  else
   @activity_items = [ ]
   render 'new'
  end
end

def show
 @lecture = Lecture.find(params[:id])
end

def destroy
  @lecture.destroy
  redirect_to root_path
end


private

  def correct_user
    @lecture = current_user.lectures.find_by_id(params[:id])
    redirect_to root_path if @lecture.nil?
  end
4

1 に答える 1

1

後続のアクションのインスタンス変数を設定する前のフィルターに依存しています。これはうまくいきません。それを必要とするコントローラーアクションで明示的に設定する必要があります。before フィルターの唯一の目的は、実行されるアクションと実行されないアクションをフィルタリングすることです。

編集:私はあなたのコードを読み違えました。create アクションの前に correct_user を実行していると思いました。いずれにせよ、今すぐ機能することを知ってうれしいです!

于 2012-06-09T22:22:38.623 に答える