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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1542閲覧

railsでインスタンス変数で持ってきたカラムの値をviewで表示したい。

mattake

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/05/16 09:14

編集2020/05/16 09:19

前提・実現したいこと

railsでインスタンス変数で持ってきたカラムの値をviewで表示したい。

発生している問題・エラーメッセージ

NoMethodError in Posts#index Showing /Users/tsukamotoyuto/projects/private-app/app/views/posts/index.html.haml where line #6 raised: undefined method `text' for #<Maxim::ActiveRecord_Relation:0x00007fd1754046a8> Extracted source (around line #6):

該当のソースコード

class PostsController < ApplicationController def index @maxims = Maxim.all.order("RAND()").limit(1) end
index.html.haml .index.container-fluide .index__maxim = @maxims.name = @maxims.text
class CreateMaxims < ActiveRecord::Migration[5.2] def change create_table :maxims do |t| t.string "text" t.string "name" t.timestamps end end end

試したこと

class PostsController < ApplicationController def index @maxims = Maxim.all.order("RAND()").limit(1) @maxims = Maxim.offset( rand(Maxim.count) ).limit(1) @maxims = Maxim.find(params[:id]) end 等を試してみたが特に結果は変わらず。
index.html.haml .index.container-fluide .index__maxim = @maxims[0]["name"] = @maxims[0]["text"] と記述すると、エラーが出ずにちゃんとDBに保存されたデータがビューで表示される。
2: .index.container-fluide 3: .index__maxim => 4: =binding.pry 5: %p= @maxims.text 6: %p= @maxims.name 7: .index__warapper.container-fluid 8: -if @present.present? 9: -@posts.each do |post| [1] pry(#<#<Class:0x00007fd16e3de978>>)> @maxims => [#<Maxim:0x00007fd16e4f57d0 id: 1, text: "aaaaaa", name: "bbbbbbb", created_at: Sat, 16 May 2020 00:00:00 UTC +00:00, updated_at: Sat, 16 May 2020 00:00:00 UTC +00:00>] bindin.pryでみてもパラムズには値が入っている。
index.html.haml .index.container-fluide .index__maxim = @maxims.name と記述すると、Viewでは、エラーが出ず「Maxim」とモデル名が表示される。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください

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

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

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

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

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

guest

回答1

0

ベストアンサー

@maxims = Maxim.all.order("RAND()").limit(1)

@maxims = Maxim.all.order("RAND()").first
に。
limit(1)は1件しか持ってこないという点ではfirstと同じですが、limitの場合は配列(のようなもの)が、firstは Maximのインスタンスが返ります。
配列(の様なもの)なので、nameもtextもありません。

なお、1件ですので、@maxims より 単数形 @maxim にしたほうが良いです。

投稿2020/05/16 11:36

winterboum

総合スコア23567

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

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

mattake

2020/05/16 13:25

ご回答頂いた内容で無事可決できました! 2つのメソッドの違いがまだまだ分かっていなかったです、、、 勉強になりました!ご説明ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問