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

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

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

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

Ruby on Rails

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

データベース

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

Q&A

解決済

2回答

1080閲覧

active_hash内データと入力データで正誤判定(ruby)

izumichika

総合スコア4

Ruby

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

Ruby on Rails

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

データベース

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

0グッド

0クリップ

投稿2020/04/05 14:36

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
初質問です。プログラミング初学者です。よろしくお願いいたします。
railsで下記URLを参考にして英単語の正誤判定ができるアプリを作成しています。(日本語を表示して、英単語を入力させる)
Ruby on Rails のクイズアプリ作成 idの受け渡しについて
基本的な機能は実装できており自分でデータベースに登録した英単語と入力した英単語を照らし合わせて◯✖️を出せるようにはできました。
次段階として英単語ドリル(予め用意した問題にチャレンジする)のような機能を実装しようと思い、ドリルを用意するに当たってactive_hashを利用しようと考えました。
データベースから中身を取り出すように、active_hashからも日本語を取り出すことは出来たのですが、「回答」ボタンを押すと
下記画像のようなエラーメッセージが発生しました。

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

該当のソースコード

ruby

1#routes.rb 2 resources :tangos, only: [:index, :new, :create, :destroy, :show] do 3 collection do 4 get 'drilltest', to: "tangos#drilltest" 5 post 'drillmark', to: "tangos#drillmark" 6 end 7 end 8 9#tangos_controller 10 def drilltest 11 @quizzes = Drill1.all 12 end 13 14 def drillmark 15 quizzes = Drill1.find(params[:quiz]) 16 @ansers = [] 17 quizzes.each do |q| 18 @ansers << {quiz: q, right: q.anser?(params["quiz#{q.id}"])} 19 end 20 end 21 22#tango.rb/model 23class Tango < ApplicationRecord 24 extend ActiveHash::Associations::ActiveRecordExtensions 25 attr_accessor :left_question, :right_anser 26 belongs_to_active_hash :drill1 27 28 def anser?(reply) 29 return self.anser == reply 30 end 31end 32 33#drilltest.html.haml 34 =form_tag drillmark_tangos_path do 35 -@quizzes.each do |quiz| 36 =quiz.question 37 =hidden_field_tag "quiz[]", quiz.id 38 =text_field_tag "quiz#{quiz.id}" 39 =submit_tag "回答" 40 41#drillmark.html.haml 42 -@ansers.each do |anser| 43 =anser[:quiz].question 44 =anser[:quiz].anser 45 =anser[:right] ? "◯" : "✖️" 46 47#drill1.rb/active_hashのfale 48class Drill1 < ActiveHash::Base 49 self.data = [ 50 {id: 1, question: 'その', anser: 'the'},{id: 2, question: '~の', anser: 'of'}, 51 {id: 3, question: '~を持つ', anser: 'have'},{id: 4, question: 'あなた', anser: 'you'}, 52 {id: 5, question: '彼', anser: 'he'},{id: 6, question: '~と一緒に', anser: 'with'}, 53 {id: 7, question: '~として', anser: 'as'},{id: 8, question: 'しかし', anser: 'but'}, 54 {id: 9, question: '~と言う', anser: 'say'},{id: 10, question: '私たち', anser: 'we'}, 55 ] 56end

試したこと

1.binding.pry
controllerのdrillmarkにてparamsにidと中身は入っている
2.error文のexpected0はgiven1に対してデータの受け取り側?が出来ていないと解釈(調べましたがいまいち自信ないです)
3.下記のようなデータベースの内容は取り扱い出来ているのでactive_hashのモデルに直接書き込んだデータの取り扱いとrubyの理解が甘いのだとは思っているのですが、1日使ってしまい進展がなかったため質問させていただきました。
イメージ説明

実装済みの動作のgif。active_hashだとできなかった

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

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

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

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

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

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

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

guest

回答2

0

自己解決

#解決方法

  • active_hashに対してancer?を使いたければ、active_hashのfaleに書き込めばよかった!

ruby

1 2class Drill1 < ActiveHash::Base 3 4 def anser?(reply) 5 return self.anser == reply 6 end 7 8 self.data = [ 9 {id: 1, question: 'その~', anser: 'the'},{id: 2, question: '~の', anser: 'of'}, 10 {id: 3, question: '~を持つ', anser: 'have'},{id: 4, question: 'あなた', anser: 'you'}, 11 12~~~~省略 13

投稿2020/04/06 14:51

izumichika

総合スコア4

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

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

0

def anser? というのが Drill1 のもつ属性 anser にかぶっているのが原因かもしれません。
correct? 辺りに変えて試してみてください。

投稿2020/04/06 12:52

winterboum

総合スコア23567

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

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

izumichika

2020/04/06 14:48

回答ありがとうございます。corect?試してみました! 別のエラーが出たため色々弄っていたら自己解決しました! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問