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

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

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

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

Q&A

解決済

3回答

15817閲覧

railsのNoMethodErrorとundefined methodのエラー

renren643

総合スコア279

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

0グッド

1クリップ

投稿2017/08/26 06:38

編集2017/08/26 09:53

cloud9でrailsを使っているのですが、初期画像を設定する時にエラーが出ます。
イメージ説明
ローカルサーバーを開くと

<div class="container"> <div class="user"> #↓が赤字 <img src="<%= "/user_images/#{@user.image_name}" %>"> <h2><%= @user.name %></h2> <p><%= @user.email %></p> <%= link_to("編集", "/users/#{@user.id}/edit") %>
class UsersController < ApplicationController def index @users = User.all end def show @user = User.find_by(id: params[:id]) end def new @user = User.new end def create @user = User.new( name: params[:name], email: params[:email], image_name: "default_user.jpg" ) if @user.save flash[:notice] = "ユーザー登録が完了しました" redirect_to("/users/#{@user.id}") else render("users/new") end end def edit @user = User.find_by(id: params[:id]) end def update @user = User.find_by(id: params[:id]) @user.name = params[:name] @user.email = params[:email] if @user.save flash[:notice] = "ユーザー情報を編集しました" redirect_to("/users/#{@user.id}") else render("users/edit") end end end

show.html.erb

1<div class="main user-show"> 2 <div class="container"> 3 <div class="user"> 4 <img src="<%= "/user_images/#{@user.image_name}" %>"> 5 <h2><%= @user.name %></h2> 6 <p><%= @user.email %></p> 7 <%= link_to("編集", "/users/#{@user.id}/edit") %> 8 </div> 9 </div> 10</div>

コード

です. 解決策をご存知であれば教えてください <%= image_tag(@user.image_name}) %>を使うと。。。 ![イメージ説明](b6dc375c637e8ccfdae61a3789e873f0.png)

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

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

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

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

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

programming

2017/08/26 07:02

どのようなエラーが表示されるのか、追記してください。
renren643

2017/08/26 09:20

追記しました。
guest

回答3

0

モデルに原因があると思われます。
migrationファイルがあるのにデータベースにフィールドがないということは、migrateで何かしら問題があったのでしょう。
rake db:migrate:statusでmigrateされていないものがあるか確認してください。
そしてmigrateできていなかったら
rake db:migrate VERSION=その時の日付
でmigrationしてください。

投稿2017/08/26 19:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

renren643

2017/08/27 04:08

回答ありがとうございます。実行したところ、 database: /home/ubuntu/workspace/db/development.sqlite3 Status Migration ID Migration Name -------------------------------------------------- up 20170825034244 Create posts up 20170825074539 Create users up 20170826055235 Add image name to users とありました。migrateされていないものはなさそうです
退会済みユーザー

退会済みユーザー

2017/08/27 05:59

ちなみにremove_columnをしている形跡はありせんか?
renren643

2017/08/27 07:03

ターミナルで実行したか? と言うことでしょうか? それならばしていません
renren643

2017/08/27 07:06

ちなみに、このエラーはrubyやrailsのバージョンとは無関係ですか??
guest

0

ベストアンサー

ここは素直にimage_tagをつかう

ruby

1<%= image_tag(@user.image_name) %>

でどうでしょう。

投稿2017/08/26 09:30

編集2017/08/26 09:56
NCC1701

総合スコア1680

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

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

renren643

2017/08/26 09:54

回答ありがとうございます。 <%= image_tag(@user.image_name}) %>にしてもエラーが出ました。 エラー画面は質問本文にアップしました
NCC1701

2017/08/26 09:57

回答にtypoがありました。}は不要です
renren643

2017/08/26 10:02

typoって誤植の事言うんですね!勉強になります やってみましたが、NoMethodError で、img srcのと変わらないエラーが出ました、
NCC1701

2017/08/26 10:09

undefined method `image_name' for は@userにそのようなメソッドが無いですとのエラーです モデルの設計とあってますか?
renren643

2017/08/26 10:30

質問本文内にあるcreateアクションで @user = User.new( name: params[:name], email: params[:email], image_name: "default_user.jpg" ) がありますがこれじゃなくてですか?
NCC1701

2017/08/26 12:42

create アクションが呼ばれたときはエラーが出なかったのですか? (本来的にはコントローラでなくモデルの問題だと思いますので、Userモデルにimage_nameというフィールドがあるか、もしくはメソッドを作ったかを確認すべきです。)
renren643

2017/08/26 13:48

create アクションが呼ばれたときはエラーが出なかったのですか? >僕の知識不足でこの言葉の意味がわからないです。すいません、どう言うことでしょうか? models/user.rb内のことでしょうか? class User < ActiveRecord::Base validates :name, {presence: true} validates :email, {presence: true, uniqueness: true} end こうです
NCC1701

2017/08/26 13:58

少なくともimage_nameメソッドは作っていないようです。 db/migrate/日付_create_users.rb か db/schema.rb を見ればモデルの内容が見られます。そこにimage_nameがあるかどうかですが、たぶんないでしょう。
renren643

2017/08/26 14:09

20170826055235_add_image_name_to_users.rbの中に class AddImageNameToUsers < ActiveRecord::Migration def change add_column :users, :image_name, :string end end を作っていました。
renren643

2017/08/26 14:17

今僕が作っているものは、progateと言うサイトで練習で作ったやつで、「答え」と「手順」があるものなんです。それと全く同じ手順でつくったものなので、なぜダメなのかが全くわからないんです。。。 一番いいのは、データベースの中身に image_name: "default_user.jpg"で定義したdefault_user.jpgの 写真が現段階で保存されているのか、データベースにimage_nameカラムが保存されているかわかれば少しは前に進めそうなのですが、それはどのようにして確認すればいいのでしょうか?
NCC1701

2017/08/26 14:38

db/schema.rbの内容は?
renren643

2017/08/26 14:42

db/schema.rbに書いてあるのって、データベースの中身ですか? こう書いてありました。 ActiveRecord::Schema.define(version: 20170826055235) do create_table "posts", force: :cascade do |t| t.text "content" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "users", force: :cascade do |t| t.string "name" t.string "email" t.datetime "created_at", null: false t.datetime "updated_at", null: false end end
NCC1701

2017/08/26 14:51

schema.rbはデータベースの最新の構造と一致するようになってます。しかしt.string "image_name"がないので、エラーになったのです。 どこかで「手順」の実行を忘れてしまったのでしょう。 rails db:migrateをしてください。その後、もう一度schema.rbを見れば、変化しているはずです。
renren643

2017/08/26 15:00

rake db:migrateを実行しましたが何も起こりませんでした。(rake db:migrateとrails db;migrateは同じですよね?cloud9でrails db;migrateを実行するとエラーが出ます) 理屈としてはデータベースにimage_nameがないからデータベースに画像を保存することが できない=エラーがでると言う認識でいいですか?
退会済みユーザー

退会済みユーザー

2017/08/26 19:23

migrateでエラーが出るのは、migrationファイルを作成したものの、何かしらの原因でそのmigrateファイルに書かれていることがデータベースに反映できていないことを指しています!
guest

0

全般的に書き方がrailsっぽくないのが気になります。
また、赤字になっているというのは、たまたま先頭だからかもしれません。
試しに、その部分をコメントアウトして、次の行も赤字ならば、そもそもそこに@userが使えないのではないでしょうか。
つまり、routesが当たっていないのではないでしょうか。

railsの大まかな流れを一度見直した方が良いと思います。

投稿2017/08/26 09:23

Yuinyan

総合スコア312

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

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

renren643

2017/08/26 09:49

回答ありがとうございます。routes.rbではpost "users/create" => "users#create"、get 'users/:id' => "users#show"と記述しているのですがどうでしょう? また、赤くなった行を消してサーバーを動かしたところきちんとなまえとeーmailの 画面が出て、エラーは出ませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問