【发布时间】:2016-04-10 00:24:34
【问题描述】:
我正在开发一个 Rails 应用程序,该应用程序具有在创建时分配了类别的 Pin 图。该应用程序共有 16 个类别。所有 Pin 图都显示在主索引页面上(类别 16 除外),用户可以单击 Pin 图,将它们带到 @Pin 的显示页面。 Show 页面有一个 @Pin 和一个从 db 中的所有 Pins 中选择的随机 Pin(类别 16 除外)。上面提到的动作是在pins控制器中定义的,并且正常运行。
The problem is when Category 16 is selected and the user proceeds to a Pins show page the Random Pin should be a Pin from Category 16 Only, but it is being selected from all the Pins in the db!
我已经在索引中设置了变量和条件语句,并显示了实现上述操作的动作,请在pins控制器show-action中查看我的cmets。问题代码在评论中仍然存在 ====SOMETHING WRONG!====
请帮助我对 Rails 比较陌生,我不确定我做错了什么,我花了几个小时尝试各种但没有任何效果。
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 问题
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
【问题讨论】:
-
我怀疑你的意思是
where.not(id: 16)而不是where.not(16)。
标签: ruby-on-rails