0

私は、YouTube動画を動的に埋め込むためのWebアプリケーションを開発しています。リンク経由でパラメータを渡しても生産中ではない

class Category < ActiveRecord::Base 
    has_many :groups 
end 

class Group < ActiveRecord::Base 
    belongs_to :category 
    has_many :videos 
end 

class Video < ActiveRecord::Base 
    belongs_to :group 
end 

routes.rbをファイル

root 'welcome#index' 
    resources :categories 
    resources :groups 
    resources :videos 

のホームページがリンクされているすべてのカテゴリのリストが含まれています

は私のモデルです。私はリンクを介してパラメータとしてIDを渡しているので、私はグループ#インデックスでそのIDにアクセスすることができます。
<%= @categories.each do |category| %> 
    <%= link_to groups_path(id: category.id) do %> 
    <div class="course"> 
     <h2><%= category.name %></h2> 
     <p><%= category.description %></p> 
    </div> 
    <% end %> 
<% end %> 

私はカテゴリのいずれかをクリックし

は、私は、グループ番号のインデックスページにリダイレクトしたいが、私だけがそのカテゴリに属しているグループを表示します。

したがって、次のような私のグループコントローラインデックスアクションを書きました。

class GroupsController < ApplicationController 

    before_action :find_group, only: [:index, :edit, :update] 

    def index 
    @category = Category.find(params[:id]) 
    @groups = @category.groups 
    end 

    def new 
    @group = Group.new 
    end 

    def create 
    @group = Group.new group_params 
    if @group.save 
     flash[:notice] = "Group #{@group} was successfully added." 
     redirect_to groups_path 
    else 
     flash[:notice] = "Oops.. unable to create the group. Please check for errors." 
     redirect_to groups_path 
    end 
    end 

    def edit 
    end 

    def update 
    if @group.update update_params 
     flash[:notice] = "Group #{@group} was successfully updated." 
     redirect_to groups_path 
    else 
     flash[:notice] = "Oops.. unable to update the group. Please check for errors." 
     redirect_to groups_path 
    end 
    end 

    private 

    def group_params 
    params.require(:group).permit(:title, :description, :category_id) 
    end 

    def find_group 
    @group = Group.find(params[:id]) 
    end 

end 

カテゴリリンクをクリックすると、そのカテゴリに対して作成されたグループがなくても正常に動作しています。しかし、プロダクションで開くと、そのカテゴリのグループがないとエラーが表示されます。 "heroku logs"の場合、エラーは

2016-03-24T17:25:05.102549+00:00 app[web.1]: Started GET "/groups?id=2" for 117.213.140.66 at 2016-03-24 17:25:05 +0000 
2016-03-24T17:25:05.107691+00:00 app[web.1]: Processing by GroupsController#index as HTML 
2016-03-24T17:25:05.107750+00:00 app[web.1]: Parameters: {"id"=>"2"} 
2016-03-24T17:25:05.115174+00:00 app[web.1]: Group Load (6.1ms) SELECT "groups".* FROM "groups" WHERE "groups"."id" = $1 LIMIT 1 [["id", 2]] 
2016-03-24T17:25:05.115830+00:00 app[web.1]: Completed 404 Not Found in 8ms (ActiveRecord: 6.1ms) 
2016-03-24T17:25:05.118387+00:00 app[web.1]: 
2016-03-24T17:25:05.118409+00:00 app[web.1]: ActiveRecord::RecordNotFound (Couldn't find Group with 'id'=2): 
2016-03-24T17:25:05.118410+00:00 app[web.1]: app/controllers/groups_controller.rb:45:in `find_group' 
2016-03-24T17:25:05.118411+00:00 app[web.1]: 
2016-03-24T17:25:05.118411+00:00 app[web.1]: 
2016-03-24T17:25:05.128576+00:00 heroku[router]: at=info method=GET path="/groups?id=2" host=akashpinnaka.herokuapp.com request_id=eb1cd798-fcf4-4aaa-87b3-9fd20d5b00d8 fwd="117.213.140.66" dyno=web.1 connect=0ms service=36ms status=404 bytes=1758 
2016-03-24T17:25:05.963007+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=akashpinnaka.herokuapp.com request_id=b040c32d-fad6-4a64-95ef-94d057a5a34b fwd="117.213.140.66" dyno=web.1 connect=0ms service=4ms status=304 bytes=62 

です。これまでのところ、グループ#インデックスページは静的です。私は英雄に間違いがありますが、開発にはうまくいきます。

私は間違っていますか?

+0

プロダクションで作成されたグループのデータがまだありません - プロードDBを作成して再試行してください –

+0

私は開発中のデータがなくてもエラーは発生していません。グループ#インデックステンプレートは静的なページなので、 –

+0

開発モードは生産よりもはるかに寛容です(たとえば、 'whiny_nils'設定を見てください)。 RAILSサーバを実運用モード( 'RAILS_ENV = production rails s')でローカルに実行する場合は、同じ問題を実行する必要があります –

答えて

1

find_groupで失敗しているようです(おそらくbefore_actionの一部として呼ばれます)。指定したコントローラコードには、そのパーツへの参照は含まれていません。

+0

ありがとうございます:)それは働いています –

+0

これはどのように答えですか? – MTarantini

1

用途:

@group = Group.find_by(id: params[:id]) 

それはそのIDを持つレコードが見つからない場合は、エラーがスローされません「find_by」ながら、エラーがスローされます「検索」する方法。

より良い解決策は、before_actionアクションリストのindexを削除することです。なぜインデックスページに@groupが必要なのか分かりません。

関連する問題