teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

より具体的な質問に修正。

2020/10/28 02:17

投稿

kema
kema

スコア6

title CHANGED
File without changes
body CHANGED
@@ -7,23 +7,55 @@
7
7
 
8
8
  なんとかActionText内のデータを検索することには成功し、表示させることには成功したのですが,挙動が少しおかしいです。
9
9
 
10
+ **エラーの発生条件**
11
+ - サーバーを再起動した後にトップ画面(URL:localhost:3000)を再読み込み後、検索フォームに何か文字を入力してから検索ボタンを押すと
12
+ ```
13
+ Showing /Users/masakikengo/projects/tiisana/app/views/posts/search.html.erb where line #6 raised:
10
14
 
11
- - トップページからの一回目の検索のときだけたまに下記のエラーが表示される。
15
+ undefined method `each' for :search:Symbol
12
- - ただその後の検索では問題無く記事の内容は検索できる。
13
16
 
17
+ ```
14
- なにぶん初心者なので細かい部分の動きの理解乏しくて中々自分で調べていだけでは原因にたどり着けませんでした
18
+ とエラー表示される。
15
19
 
20
+ - ただ何も入力せずに検索ボタンだけを押してもエラーは出ずに画面遷移だけ行われ、その後に検索してもエラーは発生しない。
21
+
22
+ - エラー発生後に同じ画面を再読み込みするとその後の検索では問題無く記事の内容は検索できるようになる。
23
+
24
+ - ログイン状態はエラーの発生には関係がない。
25
+
26
+
27
+ **検索結果を表示するactionのcode**
28
+ app/controllers/posts_controller.erb
16
29
  ```
30
+  def search
17
- undefined method `each' for :search:symbol
31
+ @posts = Post.search(params[:keyword])
32
+ end
18
33
  ```
34
+ app/models/post.rb
35
+ ```ここに言語を入力
36
+ class Post < ApplicationRecord
37
+ ##省略##
38
+ def self.search(search)
39
+ if search != ""
40
+ scope :search, -> (search_param = nil) {
41
+ return if search_param.blank?
42
+ joins("INNER JOIN action_text_rich_texts ON action_text_rich_texts.record_id = posts.id AND action_text_rich_texts.record_type = 'Post'")
43
+ .where("action_text_rich_texts.body LIKE ? OR posts.title LIKE ? ", "%#{search_param}%", "%#{search_param}%")
44
+ }
45
+ else
46
+ Post.all
47
+ end
48
+ end
49
+ ```
50
+ なにぶん初心者なので細かい部分の動きの理解が乏しくて中々自分で調べているだけでは原因にたどり着けませんでした。
19
51
 
20
-
21
52
  ### 該当のソースコード
22
53
  app/models/post.rb
23
54
  ```
24
55
  class Post < ApplicationRecord
25
56
  has_rich_text :content
26
- has_one_attached :image
57
+ has_one_attac
58
+ hed :image
27
59
  belongs_to :user
28
60
  has_many :comments
29
61
 
@@ -161,6 +193,59 @@
161
193
  <div class="container" style="margin-bottom:100px;">
162
194
  ```
163
195
 
196
+ ###追加のコード
197
+ app/views/layouts/application.html.erb
198
+ ```
199
+ <body>
200
+ <nav class="navbar navbar-light navbar-expand-md ">
201
+ <a class="navbar-brand text-primary",class="h1" href="/">
202
+ <div class="h3">Tiisana</div>
203
+ </a>
204
+ <div class="collapse navbar-collapse">
205
+ <ul class="navbar-nav ml-auto">
206
+ <div class="navbar-item d-flex justify-content-end align-items-center">
207
+ <%= form_with(url: search_posts_path, local: true, method: :get, class: "search-form") do |form| %>
208
+ <div class="input-group">
209
+ <%= form.text_field :keyword, class: "search-form navop" %>
210
+ <%= button_tag sanitize('<i class="fa fa-search"></i>'), :type => "submit",:class =>"btn btn-light mr-1" %>
211
+ </div>
212
+ </div>
213
+ <% end %>
214
+
215
+ <% if user_signed_in? %>
216
+ <li class="nav-item mr-2 ">
217
+ <%= link_to "新規投稿", new_post_path, class: "nav-alink btn btn-light " %>
218
+ </li>
219
+ <li class="nav-item dropdown">
220
+ <div class="btn-group">
221
+ <button class="nav-alink btn btn-light dropdown-toggle" data-toggle="dropdown" href="/" aria-haspopup="true" aria-expanded="false"><%= current_user.nickname %>
222
+ </button>
223
+ <div class="dropdown-menu dropdown-menu-right">
224
+ <%= link_to "マイページ", "/users/#{current_user.id}", class: "dropdown-item", type:"button"%>
225
+ <%= link_to "ログアウト", destroy_user_session_path, method: :delete, class:"dropdown-item", type:"button"%>
226
+ </div>
227
+ </div>
228
+ <ul>
229
+ </li>
230
+ <% else %>
231
+ <li class="nav-item mr-2">
232
+ <%= link_to "ログイン", new_user_session_path, class: "nav-alink btn btn-light" %>
233
+ <%= link_to "新規登録", new_user_registration_path, class: "nav-alink btn btn-light"%>
234
+ </li>
235
+ </ul>
236
+ <% end %>
237
+ </div>
238
+ </nav>
239
+ <%= yield %>
240
+ <nav class="navbar bg-light navbar-light navbar-expand-md mt-5 fixed-bottom">
241
+ <a class="navbar-brand text-center" href="/">© 2020 Tiisana</a>
242
+ </nav>
243
+
244
+ <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
245
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
246
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
247
+ </body>
248
+ ```
164
249
  ### 試したこと
165
250
  エラー分の内容的にeach文の中に渡している値がおかしいみたいのなので、ActionTextの内容を表示させる以下の部分を
166
251
 

2

質問の拡張子の記述ミスの修正です。

2020/10/28 02:17

投稿

kema
kema

スコア6

title CHANGED
File without changes
body CHANGED
@@ -46,7 +46,7 @@
46
46
  end
47
47
 
48
48
  ```
49
- app/controllers/posts_controller.rb
49
+ app/controllers/posts_controller.erb
50
50
  ```
51
51
  class PostsController < ApplicationController
52
52
  before_action :set_post, only: [:show, :edit, :update, :destroy]

1

文章がわかりにくかったので修正しました。

2020/10/27 23:36

投稿

kema
kema

スコア6

title CHANGED
@@ -1,1 +1,1 @@
1
- ActionTextで投稿した記事を検索し、テキストの部分だけ表示させることができた。しかし一回目の検索時にだけエラーが出てしま
1
+ ActionTextで投稿した記事を検索し、テキストの部分だけ表示させた。しかし何故か一回目の検索時にだけエラーが出てしまいます
body CHANGED
@@ -1,8 +1,8 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- ActionTextを使用して投稿した記事検索して一覧表示したい。
3
+ ActionTextを使用して投稿した記事検索して文章だけを一覧表示したい。
4
+ 今回は検索の結果をBootstrapのCard機能をしようして一覧表示にしたいので、画像のデータがあるとレイアウトが崩れてしまいます。
4
5
 
5
-
6
6
  ### 発生している問題・エラーメッセージ
7
7
 
8
8
  なんとかActionText内のデータを検索することには成功し、表示させることには成功したのですが,挙動が少しおかしいです。
@@ -12,7 +12,7 @@
12
12
  - ただその後の検索では問題無く記事の内容は検索できる。
13
13
 
14
14
  なにぶん初心者なので細かい部分の動きの理解が乏しくて中々自分で調べているだけでは原因にたどり着けませんでした。
15
- `
15
+
16
16
  ```
17
17
  undefined method `each' for :search:symbol
18
18
  ```
@@ -174,7 +174,6 @@
174
174
  ```
175
175
  確かに投稿した内容は全て表示される。
176
176
 
177
- でも今回は検索の結果をBootstrapのCard機能をしようして一覧表示にしたいので画像のデータがあるとレイアウトが崩れてしまう。
178
177
 
179
178
 
180
179
  検索機能と検索後に文章だけを抜粋するのは以下のサイトを参考に実装しました。