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

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

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

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

Ruby on Rails

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

Q&A

1回答

873閲覧

NoMethodError in Todolists#new 星の評価を作成中にエラーが出て解決策が無く、困っています。

Takanoj

総合スコア38

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/19 14:19

前提・実現したいこと

星の評価の実装。
質問の内容
・星の評価を作成したのですが、エラーが出て解決出来ず投稿しました。

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

NoMethodError in Todolists#new

Showing /home/vagrant/work/gogogogogogo/app/views/todolists/new.html.erb where line #7 raised

**undefined method `rate' for #<User id: nil, created_at: nil, updated_at: nil>

Extracted source (around line #7):
5**
6
7
8
9
10

<%= f.label :rate %>
<%= f.hidden_field :rate, id: :review_star %>

<% end %>

:イメージ説明

エラーメッセージ

### 試したこと スペルミスなどをチェックしたのですが、分かりませんでした。 何度かコードを整えました。 ### newコントローラ情報 **class TodolistsController < ApplicationController def new @user = User.new end def index end end ** ### **newページ** <h1>Todolists#new</h1> <p>Find me in app/views/todolists/new.html.erb</p> <%= form_for @user, url: '/todolists_index' do |f| %> <%= f.label :rate %> <%= f.hidden_field :rate, id: :review_star %> <% end %> javascript: $('#star').raty({ size: 36, starOff: "#{asset_path('star-off.png')}", starOn: "#{asset_path('star-on.png')}", starHalf: "#{asset_path('star-half.png')}", scoreName: 'review[rate]', half: true, });** ### **Reviewモデル** class Review < ApplicationRecord validates :rate, numericality: { less_than_or_equal_to: 5, greater_than_or_equal_to: 1 }, presence: true end ### **Reviewテーブル** class AddRateToReview < ActiveRecord::Migration[5.2] def change add_column :reviews, :rate, :float, null: false, default: 0 end end よろしくお願いします。

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

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

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

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

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

guest

回答1

0

エラーメッセージの通りです。

form_for@userのオブジェクトに対するフォームを作成しています。
そしてそのフォームオブジェクトをレシーバとしたinput要素f.hidden_field :rate, id: :review_starの値には@user.rateの値を初期値としようとしますが、rateなんていうメソッドはないですよとエラーが出ています。

投稿2020/05/19 14:46

Mugheart

総合スコア2349

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

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

Takanoj

2020/05/20 00:43 編集

ご連絡ありがとうございます! エラーの内容は、分かりました。 エラー解消の方法として、コントローラ情報 @user = User. new(:rate)引数として入れれば宜しいのでしょうか。 rails学びだして、2ヶ月なので、ご教授頂ければと思います。
Mugheart

2020/05/20 00:58

メソッドが存在しないのが原因なので、引数云々の話ではないです。 rateメソッドを定義する、もしくはrateメソッドが定義されているオブジェクトを使用することでエラーは回避できると思います。 おそらく今回の場合は後者になると思いますが、私はアプリケーションの作成者ではないので最終的な判断は自身で行ってください。
Mugheart

2020/05/20 01:02

今回の質問はRubyの話なので、Railsを学び出して2ヶ月というのはあまり関係ないです。 form_forの扱いがうまくできないとかならまだわかりますが、エラーメッセージを見て @user = User. new(:rate) という解決策を導き出すようではRuby力が足りてないと言わざるを得ません。 むしろ、それならRubyをきちんと理解して、デバッグくらい自力でできるようになってからRailsに手を出すべきなのでは?という話にしかならないので、力不足を自覚しているのであればきちんと土台を固めることをお勧めします。 Railsと平行で構いませんので、Ruby自体の学習も検討してみてください。
Takanoj

2020/05/20 05:37

わかりました  ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問