簡體   English   中英

條件語句使Rails 4失敗

[英]Conditional statement fails Rails 4

我正在開發一個Rails應用程序,該應用程序的引腳在創建時會分配一個類別。 該應用程序共有16個類別。 所有圖釘都顯示在主索引頁面上(類別16除外),用戶可以單擊圖釘,將其帶到@Pin的顯示頁面。 “顯示”頁面具有@Pin和一個從數據庫中的所有引腳(類別16除外)中選擇的隨機引腳。 上面提到的動作在引腳控制器中定義,並且功能正常。

問題是,當選擇類別16且用戶進入“引腳顯示”頁面時,隨機引腳應僅是類別16中的引腳,但它是從數據庫中的所有引腳中選擇的!

我已經在索引中設置了變量和條件語句,並顯示了實現上述目標的操作,請在pin控制器show-action中檢查我的注釋。 問題代碼在注釋中仍然存在====有些錯誤!====

請幫助我對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

這行不是您所期望的

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

它將從類別16或ID而不是@pin中選擇一個隨機的引腳(您希望我從類別16和ID而不是@pin中得到的想法 )。 更改為:

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

玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM