2017-06-10 15 views
0

エラーが発生した場合にインデックスページを再レンダリングするのに問題があります。 2つのフィールドが空白の場合、ウェルカム/インデックスを表示する必要があります。Railsでエラーチェックを処理した後にインデックスページをレンダリングする際に問題が発生しました

def index 
    if params[:cityzip] == "" && params[:searchname] == "" 
     p "***************" 
     @error = "You must enter a location" 
     p "***************" 
     render'welcome/index.html.erb' 
    elsif params[:searchname] != "" 
     @providers = Provider.searchname(params[:searchname].capitalize) 
    elsif params[:cityzip] != "" && params[:insurance][0] == "---" 
     @providers = Provider.search(params[:cityzip]) 
    elsif params[:cityzip] != "" && params[:insurance][0] != "" 
     @providers = Provider.search(params[:cityzip]).insurancesearch(params[:insurance][0].upcase)    
    end 
    @searchname = params[:searchname] 
    @search = params[:cityzip] 
    @insurancesearch = params[:insurance] 
    @locations = [] 
    @filters = [] 
    if params[:searchname] != "" 
     @filters << params[:searchname] 
    end 
    if params[:insurance][0] != "" 
     @filters << params[:insurance][0] 
    end 
    def latlon(city) 
     url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' + city + '&key=AIzaSyC_VdOLBtVFbR-6rRP5-hRFXChHa78bDmM' 
     citylatlon =[] 
     city = open(url).read 
     city = JSON.parse(city) 

     city["results"][0]["geometry"]["location"] 
    end 

    @providers = @providers.order("lastname") 
    @providers = @providers.order('distance asc').paginate(:per_page => 30, :page => params[:page]) 
end 

インデックスページは、「ビュー」フォルダの「ウェルカム」フォルダにあります。コードはProvidersコントローラにあります。私は、インデックスメソッドを持っているウェルカムもコントローラを持っています。その後何が無関係である必要がありますので、それはコントローラのさらに下に行くとき

Started GET "/providers?utf8=%E2%9C%93&insurance%5B%5D=AETNA&cityzip=&searchname=" for ::1 at 2017-06-10 12:06:04 -0500 
Processing by ProvidersController#index as HTML 
    Parameters: {"utf8"=>"✓", "insurance"=>["AETNA"], "cityzip"=>"", "searchname"=>""} 
Geokit is using the domain: localhost 

Rendering welcome/index.html.erb within layouts/application 
Rendered welcome/index.html.erb within layouts/application (3.4ms) 
Completed 500 Internal Server Error in 23ms (Views: 20.1ms | ActiveRecord: 0.0ms)` 

NoMethodError (undefined method 'order' for nil:NilClass):` 

app/controllers/providers_controller.rb:36:in 'index' 
    Rendering /Users/dragunfly/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout 
    Rendering /Users/dragunfly/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb 
    Rendered /Users/dragunfly/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.7ms) 
    Rendering /Users/dragunfly/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb 
    Rendered /Users/dragunfly/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.5ms) 
    Rendering /Users/dragunfly/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb` 

    Rendered /Users/dragunfly/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.5ms) 
    Rendered /Users/dragunfly/.rvm/gems/ruby-2.4.1/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (139.2ms) 

NoMethodError (undefined method 'order' for nil:NilClass):このエラーが起こる:これは私が取得していますエラーです。私は最初のページをロードする際

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Referralgps</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> 


    <%= csrf_meta_tags %> 

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    </head> 

    <body> 

    <nav class="navbar navbar-inverse nobottommargin "> 
    <div class="container"> 
    <a href="/welcome/index" ><img src="/images/referral_gps_logo.png"></a> 
    </div> 
    </nav> 
    <%= yield %> 
    <footer class="visible-lg-*"> 
     <img src="/images/footlogo.png"> 

    </footer> 
    </body> 
</html> 

それは正常に動作します:

layouts/applicationは、次のようになりますページのレイアウトです。しかし、エラーのためにレンダリングしようとすると動作しません。

+2

完全エラースタックトレースで質問を更新してください – Pavan

+0

「これは私が得ているエラーです...」 - エラーはどこですか? –

+0

23msで内部サーバエラー500(ビュー:20.1ms | ActiveRecord:0.0ms)ページをレンダリングするのではなく、コントローラの残りの部分を実行しようとしています。 – almusavi

答えて

0

最初の条件では、@providersという変数を定義しません。したがって、nilであり、方法orderを理解できません。

少なくとも@providersが存在するかどうかを確認してから、orderに送信してください。

物事をより読みやすくするために:

def index 
    if missing_location? 
    @error 
    else 
    your_main_flow 
    end 
end 

private 

def missing_location? 
    params[:cityzip].empty? && params[:searchname].empty? 
end 

また、全体のコントローラのプライベートスコープにindex法の適用範囲からlatlon(city)を移動します。

+0

しかし、インデックスページをレンダリングする前にそれを表示してはいけませんか? – almusavi

+1

いいえ、 'render'はあなたをコントローラから返しません。 – yzalavin

+0

私は@providersをランダムな値に設定しました。 – almusavi

関連する問題