Я разрабатываю приложение rails, в котором есть контакты, которым назначена категория при создании. Приложение содержит 16 категорий. Все пины отображаются на главной странице индекса (кроме категории 16), и пользователь может щелкнуть Pin, который приведет их на страницу показа @Pin. На странице «Показать» есть @Pin и случайный контакт, выбранный из всех контактов в db (кроме категории 16). Указанные выше действия определены в контроллере контактов и функционируют без ошибок.Условный оператор не работает Rails 4
Проблема заключается в том, что, когда выбрана категория 16, и пользователь переходит к странице показа Pins, случайный контакт должен быть Pin из категории 16 Only, но он выбирается из всех контактов в db!
Я установил переменные и условные утверждения в индексе и покажу действия для достижения вышеуказанного, пожалуйста, проверьте мои комментарии в 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 шоу-действие ПРОБЛЕМА
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)'. –