Rails控制器和显示页面的问题

时间:2017-02-08 07:34:50

标签: ruby-on-rails

我的显示页面出现问题,它很好地显示了我的类别页面,但是当我点击我的类别ID时,它会出现以下错误:

enter image description here

这是我的Show html页面代码:

<div id="page-index">
  <% @games.each_slice(4) do |game| %>
    <div class="row">
      <% game.each do |game| %>
       <div class="col-md-3 col-sm-3">
          <div class="thumbnail">
            <%= image_tag(game.coverpath)if game.coverpath.presence%>
              <h4><b>Uncharted</b></h4>
              <p><%= game.description%></p>
              <%= link_to 'Read More', game_path(game), class:'btn btn-primary'%>
          </div>
        </div>
      <% end %>
    </div>
  <% end %>
</div>

这是我的类别控制器代码:

class CategoriesController < ApplicationController
  def index
    @categories=Category.all
  end
  def new
    @category=Category.new
  end
  def create
    @category=Category.new(category_params)
    if @category.save
      flash[:notice] = 'category created'
      redirect_to categories_path
    else
      render 'new'
    end
  end
  def edit
    @category=Category.find(params[:id])
  end
  def update
    @category=Category.find(params[:id])
    @category.update(category_params)
    flash[:notice] = 'category updated'
    redirect_to categories_path
  end
  def destroy
    @category=Category.find(params[:id])
    @category.destroy
    flash[:notice] = 'game deleted'
    redirect_to categories_path
  end
  def show
    @category = Category.find(params[:id])
    @categories = Category.all
    @games = @categories.games
  end
  private
  def category_params
    params.require(:category).permit(:genre)
  end
end

2 个答案:

答案 0 :(得分:0)

你的类别模型与游戏有关系,而不是你的类别集合

你可以用

来做
def show
  @category = Category.find(params[:id])
  @categories = Category.all
  @games = @categories.map(&:games) 
end

从每个类别获取所有游戏或执行以下操作

@games = Game.where(category_id: @categories.pluck(:id))

或者如果您想要显示类别中的游戏

@games = @category.games

答案 1 :(得分:0)

<div style="background:#FF0000;">

  <div style="vertical-align:middle; text-align:center; padding:50px;">

    <button name="Submit" type="submit" class="social_button_area_post" title=" Share Your Flow ">
      <i class="fa fa-share-alt-square"></i> Video
    </button>

    <button name="Submit" type="submit" class="social_button_area_post" title=" Share Your Flow " id="hidethisbutton">
      <i class="fa fa-share-alt-square"></i> Post
    </button>

    <button name="Submit" type="submit" class="social_button_area_post" title=" Share Your Flow ">
      <i class="fa fa-share-alt-square"></i> Photo
    </button>

  </div>

</div>

此处@categories = Category.all 是ActiveRecord_Relation对象(在rails控制台中尝试@categories) 如果在类别和游戏之间定义了@categories.class关系 在app / models / category.rb中

has_many

这意味着类别对象可以有许多与之关联的游戏对象。 由于@categories不是Category对象(它是由ARel定义的对象集合),因此抛出错误。启动rails控制台并尝试它。

要获得某个类别的游戏,您可以先通过

获取类别对象

has_many :games

category = Category.find(<some_id>)(如果是games = category.games关系)

P.S错误只是说方法游戏没有在您调用它的对象上定义。您还可以尝试has_many来检查在该对象上定义的方法。