通过链接传递参数不在生产中工作

时间:2016-03-24 18:18:22

标签: ruby-on-rails ruby-on-rails-4 heroku params production-environment

我正在开发一个动态嵌入YouTube视频的网络应用程序。

以下是我的模特:

Match()

routes.rb文件

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

主页包含所有链接类别的列表。我通过链接传递id作为参数,以便我可以在组#index。

中访问该ID
  root 'welcome#index'
  resources :categories
  resources :groups
  resources :videos

当我点击其中一个类别时,我想重定向到组#index页面,但我想显示这些组只属于该类别。

所以,我编写了我的群组控制器索引操作,如下所示。

<%= @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 %>

当我点击类别链接时,即使没有为该类别创建组,它也能正常工作。但是当我在生产中打开时,如果该类别没有组,则显示错误。当“heroku登录”时,错误是

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

到目前为止,组#index页面是静态的。虽然我在heroku中遇到错误但在开发方面运作良好。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

使用:

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

&#39;发现&#39;如果方法找不到具有该ID的记录,则会抛出错误,而“找不到”#39;不会抛出错误。

更好的解决方案是删除:before_action操作列表中的index。我不明白你为什么在索引页面上需要@group。

答案 1 :(得分:1)

看起来它在find_group失败了(可能被称为before_action的一部分?)。您提供的控制器代码不包含对该部分的任何引用。