回答編集履歴

2

moke

moke score 2149

2017/03/04 10:54  投稿

or の内部のArticleがarticle_bodiesとjoinされていません。
```ruby
     @articles = Article
                       .includes(:category, :admin)
                       .joins(:article_bodies)
                       .where('UPPER(title) like :value',value: "%#{params[:q].upcase}%")
                       .or(Article.joins(:article_bodies).where('UPPER(article_bodies.parts) like :value',value: "%#{params[:q].upcase}%"))
                       .order(id: :DESC)
                       .page(params[:page])
                       .per(25)
     @count = Article
                       .joins(:article_bodies)
                       .where('UPPER(title) like :value',value: "%#{params[:q].upcase}%")
                       .or(Article.joins(:article_bodies).where('UPPER(article_bodies.parts) like :value',value: "%#{params[:q].upcase}%"))
                       .count
```
普通こういう時はエラーメッセージも晒すべきです。
あと余談ですが、ransackという素晴らしいgemを入れると。
```ruby
_search.html.erb
<%= search_form_for @q ,:url=>{:controller=>"articles",:action=>"index"} do |f| %>
年度
検索文字列
<%= f.search_field :title_or_article_bodies_part_cont %>
< end >
```
```ruby
articles_controller.rb
def index
@q = Articles.includes(:category, :admin).joins(:article_bodies).ransack(params[:q])
@articles = @q.result.order(id: :DESC).page(params[:page]).per(25)
@count = @q.result.count
~
end
```
ですみます。車輪の再発明は勉強になりますがDRY(Don't Repeat Yourself)
もrailsの理念です。gemの導入を考えてみては?
1 count修正

moke

moke score 2149

2017/03/04 10:53  投稿

or の内部のArticleがarticle_bodiesとjoinされていません。
```ruby
     @articles = Article
                       .includes(:category, :admin)
                       .joins(:article_bodies)
                       .where('UPPER(title) like :value',value: "%#{params[:q].upcase}%")
                       .or(Article.joins(:article_bodies).where('UPPER(article_bodies.parts) like :value',value: "%#{params[:q].upcase}%"))
                       .order(id: :DESC)
                       .page(params[:page])
                       .per(25)
     @count = Article
                       .joins(:article_bodies)
                       .where('UPPER(title) like :value',value: "%#{params[:q].upcase}%")
                       .or(Article.joins(:article_bodies).where('UPPER(article_bodies.parts) like :value',value: "%#{params[:q].upcase}%"))
                       .count
```
普通こういう時はエラーメッセージも晒すべきです。
あと余談ですが、ransackという素晴らしいgemを入れると。
```ruby
_search.html.erb
<%= search_form_for @q ,:url=>{:controller=>"articles",:action=>"index"} do |f| %>
年度
<%= f.search_field :title_or_article_bodies_part_cont %>
< end >
```
```ruby
articles_controller.rb
def index
@q = Articles.includes(:category, :admin).joins(:article_bodies).ransack(params[:q])
@articles = @q.result.order(id: :DESC).page(params[:page]).per(25)
@count = @q.result.count  
~
end
```
ですみます。車輪の再発明は勉強になりますがDRY(Don't Repeat Yourself)
もrailsの理念です。gemの導入を考えてみては?

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る