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

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

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

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

Q&A

解決済

2回答

1347閲覧

railsのhas_manyで、viewでの表示の仕方

JunZenpou

総合スコア24

Ruby on Rails

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

0グッド

0クリップ

投稿2017/06/17 06:43

###前提・実現したいこと
今、twitterぽいサイトをrailsの練習で作成しています。
前提として、usersテーブルがid,name,username,email,password,created、 postsテーブルが、id,user_id,body,createdで、users has_many posts ,posts belongs_to usersです。
ユーザーの検索に置いて、少し困っています。
下記のようにコードを作成して見ました。

controller

<h1>友達検索</h1> <% @post = Post.new unless @post %> ユーザー: <%=@user.name %><br/><br/> <%= form_tag("/posts/search", method: "post") do %> <%= label_tag(:username, "名前: ") %> <%= text_field_tag(:username) %> <%= submit_tag("検索") %> <% end %> <hr> <%= if false %> <% @data.posts.each do |ob| %> <%= ob.user_id %> <% end %> <% end %> <% @data.each do |obj| %> <%= obj.name %><br/> <%= obj.username %><br/> <%= obj.created_at %><br/> <%= obj.posts.each do |ob| %> <br/> <%= ob.body %> <% end %> <% end %>
class PostsController < ApplicationController def index @user = current_user end def addRecord if request.post? then Post.create(post_params) redirect_to action: :home end end def home @user = current_user @post = Post.new end def mypage end def search @user = current_user @data = Array.new if request.post? then f = '%' + params[:username] + '%' @data = User.where "name like ? or username like ?", f, f end end end private def post_params params.require(:post).permit(:body) end

1,このユーザー検索で、1ユーザーに対して、そのユーザーに紐付くツイート1つを表示したいのですが、
上記のコードだと、1ユーザーに対して、そのユーザーに紐付くツイート全てが表示されてしまいます。
何か、いい方法ありますか?

2,また、上記のコードで、@data.postsをeachで取り出してるコードがエラーになるんですが、
具体的に何がエラーになっているのかわからないです。

上記の2つのアドバイスよろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

1,このユーザー検索で、1ユーザーに対して、そのユーザーに紐付くツイート1つを表示したいのですが、
上記のコードだと、1ユーザーに対して、そのユーザーに紐付くツイート全てが表示されてしまいます。
何か、いい方法ありますか?

末尾にwhere().limit(n)でn=1を入れてもいいですが
whereをfind_byに変更して見てください

2,また、上記のコードで、@data.postsをeachで取り出してるコードがエラーになるんですが、
具体的に何がエラーになっているのかわからないです。
@dataがarrayだからでは?

ruby

1<% @data.each do |datum| %> 2<% datum.posts.each do |ob| %> 3<%= ob.user_id %> 4<% end %> 5<% end %>

とするか

ruby

1<% @data.first.posts.each do |ob| %> 2<%= ob.user_id %> 3<% end %>

として見てください

投稿2017/06/19 00:41

moke

総合スコア2241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JunZenpou

2017/06/19 02:21

できました。ありがとうございました。
guest

0

ControllerでDBを扱うコードを書いてみはどうでしょうか?
こんな感じで
http://qiita.com/tono0123/items/576a4a4659b51860f304

投稿2017/06/17 07:04

sweden1

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問