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

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

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

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

Q&A

解決済

1回答

3039閲覧

Rails アプリケーションプログラム grouped_collection_select で method がうまく認識されない。

dampa

総合スコア11

Ruby on Rails

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

0グッド

1クリップ

投稿2017/06/15 09:43

ただいま、Ruby on Rails5 アプリケーションプログラミングを読みながら勉強しております。
ですが、4.1.9章の選択ボックスの選択肢をグループ化するというところで躓いてしまいました。

grouped_collection_select メソッドを用いてデータベースの情報からグループ化された選択肢を表示するプログラムを作ろうとしています。

エラーメッセージはこちらになります。

NoMethodError in View#group_select Showing app/views/view/group_select.html.erb where line #3 raised: undefined method `books' for #<Author:0x007fba9b896c20> Extracted source (around line #3): <%= form_for(@review) do |f| %> レビュー対象書籍: <%= f.grouped_collection_select :book_id, @authors, :books, :name, :id, :title %> <% end %>

下に関係がありそうな部分のコードを載せます。

lang

1#config/routes.rb 2Rails.application.routes.draw do 3 resources :fan_comments 4 resources :reviews 5 resources :authors 6 resources :users 7 resources :books 8 ・・・中略・・・ 9 get 'view/group_select' 10end

lang

1#app/models/author.rb 2class Author < ApplicationRecord 3 belongs_to :user 4end

lang

1#app/models/review.rb 2class Review < ApplicationRecord 3 belongs_to :book 4 belongs_to :user 5end

lang

1#app/models/book.rb 2class Book < ApplicationRecord 3end

lang

1#app/models/user.rb 2class User < ApplicationRecord 3end

lang

1#app/controllers/view_controller.rb 2def group_select 3 @review = Review.new 4 @authors = Author.all 5 end

lang

1#app/views/view/group_select.html.erb 2<%= form_for(@review) do |f| %> 3 レビュー対象書籍: 4 <%= f.grouped_collection_select :book_id, @authors, :books, :name, :id, :title %> 5<% end %>

サンプルのコードと全て一致していることは確認したのですが、他に何か間違えている箇所があるのでしょうか?
何か心当たりがありましたら、教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1class Author < ApplicationRecord 2 belongs_to :user 3end

ここにauthorsとbooksとの関係が記述されていないので
このようなエラーが起こっています。
例えばbookがauthor_idを持っている場合

ruby

1class Author < ApplicationRecord 2 belongs_to :user 3has_many :books 4end

と記述してください。

投稿2017/06/16 04:29

moke

総合スコア2241

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

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

dampa

2017/06/16 08:19

回答ありがとうございます。 ご指摘いただいたように model を修正したら機能としては正常に動作するようになりました。 ただ、本の内容としてはまだ Scaffolding 機能を用いて開発の基礎を学習する段階であり、Scaffold 後に model に手を加えるといった記述は出てきていませんでした。 もしかしたらこの本の誤植なのかもしれません。 参考までに Scaffold の際にコピペで利用したコマンドを記載しておきます。 ``` > rails generate scaffold book isbn:string title:string price:integer publish:string published:date dl:boolean > rails generate migration CreateJoinTableAuthorBook author book > rails generate scaffold user username:string password_digest:string email:string dm:boolean roles:string reviews_count:integer > rails generate scaffold author user:references name:string birth:date address:text ctype:string photo:binary > rails generate scaffold review book:references user:references status:integer body:text > rails generate scaffold fan_comment author_no:integer name:string body:text deleted:boolean > rails generate model memo memoable:references{polymorphic} body:string --fixture=false ``` 無事に解決できましたので改めて御礼申し上げます。 mokeさん、ありがとうございました。
moke

2017/06/16 09:12 編集

どういたしまして ええっ ついにそんな機能が! と思って調べてしまいましたが、ざっと見た限り、無いようです。 RailsはMSのような押し付けがましい空気の読み方はしないので has_manyかhas_oneかわからないし、手間としてはscaffoldの中に記述する方が 大変だよねって、ことだと思います(個人の感想です。) 正誤表が入っていて見落としているだけかもしれませんが、 初心者向けの本ならば、後続の人が悩まないように 出版社に訂正要求を出した方がいいかもしれません。 ←初心者向けの本じゃ無いですね、じゃあ放置でいいですねw プログラムの話に限らず。基本的に「全機能を網羅」 とかの触れ込みは初心者向けでは無い気がします。 has_manyのくだりはイロハのロぐらいなので...。 あとmemoable:references{polymorphic}ってのが使えるのですね勉強になりました。 polymorphicはRailsと相性がいいので使い倒してください。
dampa

2017/06/16 12:40

基礎的な部分はわかっていたつもりでしたので、後でこんな機能あったなーって思えるように一通り勉強していこうと思ってこの本を選びました。まだまだ未熟でしたようで早かったかも... polymorphicもまだ深く理解はしていませんが、便利そうな機能ですね。 こちらでつまずいた箇所を解決できたことで、より一層理解が深まりました。 これからもRailsの勉強は継続していこうと思います。 今回はありがとうございました。 また壁にぶつかったらお助けください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問