質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

解決済

Ransack、スコープを定義してlink_toで表示させたい

morioka1206
morioka1206

総合スコア21

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

2回答

0評価

0クリップ

238閲覧

投稿2022/01/18 07:44

編集2022/01/21 00:18

Ransackで締め切り日と現在の日付との差によって絞り込みをしたくスコープを定義しました。
(3日で締め切り、7日で締め切りなど)
それをリンクをクリックするとその条件にあったものだけが表示されてほしいのですが

SELECT *になってしまい、全件表示されてしまいます。
link_toにはスコープはつかうことはできないのでしょうか?

アドバイスいただけたら幸いです。

ruby

# 引数を入れたスコープ scope :day_lefts, -> (day){ where("deadline < ?", Time.zone.today + (day).days)} # 残り3日 scope :limit_three_days, -> { where(deadline: Time.zone.today + 3.days )} # 残り7日 scope :seven_days, -> { where("deadline < ?", Time.zone.today + 7.days )} scope :limit_seven_days, -> { where(deadline: Time.zone.today + 7.days )} # 残り14日 scope :two_weeks, -> { where("deadline < ?", Time.zone.today + 14.days )} scope :limit_two_weeks, -> { where(deadline: Time.zone.today + 14.days )} # 残り31日 scope :one_month, -> { where("deadline < ?", Time.zone.today + 31.days )} scope :limit_one_month, -> { where(deadline: Time.zone.today + 31.days )} # Ex:- scope :active, -> {where(:active => true)} def self.ransackable_scopes(auth_object = nil) # %i(day_left seven_days) %i(day_left day_lefts limit_three_days seven_days limit_seven_days two_weeks limit_two_weeks one_month limit_one_month) end

ruby

%= link_to "12日以内", search_prizes_path(@q, :'q[day_left_gteq' => '1', :'q[day_left_lteq' => '12')%> <%= link_to "7日以内", search_prizes_path(:limit_seven_days ) %> <%= link_to "7日以内", search_prizes_path(:seven_day )%> <%= link_to "31日以内", search_prizes_path(@q, :'q[:one_month]') %>

コントローラー

ruby

class PrizesController < ApplicationController before_action :set_q, only: [:index, :search] def index @prizes = @q.result(distinct: true) end def show @prize = Prize.find(params[:id]) end def new @categories = Category.all @prize_sellers = PrizeSeller.all @prize = Prize.new end def create @prize = Prize.new(prize_params) @prize.save end def edit @prize = Prize.find(params[:id]) end def update @prize = Prize.find(params[:id]) end def search @results = @q.result end def destroy prize = Prize.find(params[:id]) prize.destroy! end private def prize_params params.require(:prize).permit(:name, :name_kana, :introduction, :caution, :image, :prefecture_id, :number_of_winner, :start_date, :deadline, :category_id, :prize_seller_id) end def set_q @q = Prize.ransack(params[:q]) end end

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

winterboum

2022/01/18 09:21

controllerはどう書きましたか
morioka1206

2022/01/18 10:42

ありがとうございます。 controller情報追記しました。 他のリンクもSELEDT *になっているのでコントローラーが間違っているのかもしれません。 以前実装したときと同じような書き方はしているのですが。。。
morioka1206

2022/01/18 11:00

Started GET "/prizes/search?q%5Bnumber_of_win_gteq=1&q%5Bnumber_of_win_lteq=2" for ::1 at 2022-01-18 19:54:18 +0900 Processing by PrizesController#search as HTML Parameters: {"q"=>{"number_of_win_gteq"=>"1", "number_of_win_lteq"=>"2"}} Rendering layout layouts/application.html.erb Rendering prizes/search.html.erb within layouts/application Rendered layouts/_header.html.erb (Duration: 2.7ms | Allocations: 1285) Prize Load (0.2ms) SELECT "prizes".* FROM "prizes" ↳ app/views/prizes/search.html.erb:8 Rendered layouts/_notification.html.erb (Duration: 0.2ms | Allocations: 37) Rendered layouts/_prize-navi.html.erb (Duration: 1.1ms | Allocations: 134) Rendered prizes/search.html.erb within layouts/application (Duration: 22.7ms | Allocations: 12156) [Webpacker] Everything's up-to-date. Nothing to do Rendered layout layouts/application.html.erb (Duration: 37.3ms | Allocations: 18247) Completed 200 OK in 75ms (Views: 73.3ms | ActiveRecord: 0.2ms | Allocations: 18881)
morioka1206

2022/01/18 11:00

全件取得してしまっています。
winterboum

2022/01/18 11:53

number_of_win というのは Prize のスキーマですか?
morioka1206

2022/01/18 14:46

すいません。number_of_winのところはただのタイポでした。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。