Conditional语句使Rails 4失败



我正在开发一个rails应用程序,该应用程序的Pins在创建时被分配了一个Category。该应用程序共有16个类别。所有Pin都显示在主索引页面上(类别16除外),用户可以单击一个Pin,这将把它们带到@Pin的显示页面。"显示"页面的@Pin和一个随机Pin是从数据库中的所有Pin中选择的(类别16除外)。上面提到的动作是在引脚控制器中定义的,并且功能没有错误。

问题是,当选择了类别16,用户进入Pins显示页面时,随机Pin应该是仅来自类别16的Pin,但它是从数据库中的所有Pin中选择的!

我已经在索引中设置了变量和Conditional语句,并显示了实现上述操作的操作,请检查我在pins控制器中的注释显示操作。问题代码在注释处仍然存在===出现错误!===

请帮帮我,我对铁轨还比较陌生,我不确定自己做错了什么,我花了几个小时尝试各种各样的东西,但都没用。

引脚_控制器索引动作

def index
if params[:category].blank?
  @restricted = Category.find(16) # category id 16 set as var @restricted used to exclude cat 16 from index page in line below.
  @pins = Pin.where.not(category: @restricted).all.order("created_at DESC").paginate(page: params[:page], per_page: 20)
else
  @category_id = Category.find_by(name: params[:category]).id
  @pins = Pin.where(category_id: @category_id).order("created_at DESC").paginate(page: params[:page], per_page: 20)
end 

pins_controller显示操作问题

def show
@pin.increment_view_count
@show_main_cat = Category.where.not(16) # all categories except category id 16 set as var @show_main_cat
if @show_main_cat.present? 
  @restricted = Category.find(16) # category id 16 set as var @restricted.
  @random_pin = Pin.where.not(id: @pin, category: @restricted).order("RANDOM()").first # select random pin from all categories except 16 + not @pin.
end
@show_restricted_cat = Category.find(16) # category 16 set as var @show_restricted_cat < ==========SOMETHING WRONG!==============
if @show_restricted_cat.present?
  @restricted = Category.where.not(16) # all categories except 16 set as var @restricted. 
  @random_pin = Pin.where.not(id: @pin, category: @restricted).order("RANDOM()").first # Only select random pin from category 16 + not @pin.
end
@reviews = Review.where(pin_id: @pin.id).order("created_at DESC").limit(5)
if @reviews.blank?
  @avg_review = 0
else
  @avg_review = @reviews.average(:rating).round(2)
end

此行不是您所期望的

@random_pin = Pin.where.not(id: @pin, category: @restricted).order("RANDOM()").first # Only select random pin from category 16 + not @pin.

它将从类别16中随机选择一个pin,或者id不是@pin(你所期望的是,我认为来自类别16,并且id不是@pin)。更改为:

@random_pin = Pin.where.not(category: @restricted).where.not(id: @pin).order("RANDOM()").first

玩得开心!

最新更新