我正在开发一个rails应用程序,它具有在创建时分配了类别的Pins。该应用程序共有16个类别。所有引脚都显示在主索引页面上(类别16除外),用户可以单击一个引脚,将它们带到@Pin的显示页面。 Show页面具有@Pin和从db中的所有Pins中选择的Random Pin(类别16除外)。上面提到的操作在引脚控制器和功能中定义,没有错误。
问题是当选择了类别16并且用户进入引脚显示页面时,随机引脚应该是仅来自类别16的引脚,但它是从数据库中的所有引脚中选择的!
我在索引中设置了变量和条件语句,并显示了实现上述操作,请在引脚控制器show-action中查看我的注释。问题代码在评论时仍然存在====有些错误!====
请帮助我对铁路相对较新我不确定我做错了什么,我花了好几个小时尝试各种各样但没有任何效果。
pins_controller索引操作
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 show-action THE PROBLEM
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
答案 0 :(得分:1)
此行不符合您的预期
@random_pin = Pin.where.not(id: @pin, category: @restricted).order("RANDOM()").first # Only select random pin from category 16 + not @pin.
它将从类别16中选择一个随机引脚或者不是@pin (您认为我认为来自类别16并且ID不是@pin )。将其更改为:
@random_pin = Pin.where.not(category: @restricted).where.not(id: @pin).order("RANDOM()").first
玩得开心!