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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Q&A

解決済

2回答

7879閲覧

Rails の attr_accessor の使い方についておしえてください。

koume

総合スコア458

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

0グッド

1クリップ

投稿2017/10/02 08:10

Railsでデータベースの内容を取り出したり、値を変更、代入したりするプログラムを勉強しながら書いておりますが、混乱してしまって
いるのでどなたか教えていただけないでしょうか? やりたいことは以下になります。

1,モデル内でメソッドを定義しその中でデータをいくつか取り出し変数に代入する。
2,同モデル内で、他のテーブル(関連付けされていない)のデータをいくつか取り出しそれも変数に代入する。
3,1と2で設定した変数を値ごとに条件分岐させインスタンス変数に代入。
4,そのインスタンス変数を別のコントローラ、ビューで使用する。

といった具合です。

参考書に アクションの記述で肝心なのは、「長々とコードを書かない」ことです。ちょっとでもややこしくなりそうなら、モデルクラスに機能を移しましょう。
とあったので、モデルでデータを取り出したり、いろいろやろうとしています。

ここで 「attr_accessor を使えば外部からのアクセスを許す。」 と参考書に書いてありました。しかし、使い方がわかりません。

たとえばcustomerモデルで定義したインスタンス変数を別名のコントローラで使用するには? customer.rb class Customer < ActiveRecord::Base attr_accessor :score, :point def number * * time = Customer.find(2) score = time.abc xyz = Point.find(5) point = xyz.sc1 @score = score + 10 @point = point + 20 * * end

とすることでインスタンス変数@scoreや@pointはaccountコントローラや他のコントローラで使用できるようになるのでしょうか?
初心者なので変数の取り扱いで混乱しています。どなたか教えていただけないでしょうか?
宜しくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

いっぺんに説明すると混乱すると思うので、attr_accessorだけ説明します。
ちなみにattr_accessorはrubyの機能であって、railsの機能ではありません。

まず、setter/getterというものについて説明します。
setterとは、外部からインスタンス変数に値をセットするインターフェース=メソッドを指します。
getterとは、外部からインスタンス変数の値を取得するメソッドを指します。
また、このsetter/getterをアクセッサと呼びます。

以下にrubyのクラスの例を示します。
いうまでもなく、Sampleクラスのインスタンス変数は@nameですね。
rubyのインスタンス変数は外部から参照できないので、メソッドを作って外部から参照できるようにしてやる必要があります。

ruby

1class Sample 2 # getter 3 def name 4 @name 5 end 6 7 # setter 8 def name=(value) 9 @name = value 10 end 11end

このsettter/getterの使い方は、このようになります。

sample = Sample.new sample.name = "あいうえお" puts sample.name

setterは、本来name=というメソッド名ですが、name =という風にスペースを空けても使えます。

ようやく、attr_accessorの話になるのですが、
このようにattr_accessor :nameと書くと、

ruby

1class Sample 2 attr_accessor :name 3end

さきほどとまったく同じ使い方が出来ます。

sample = Sample.new sample.name = "あいうえお" puts sample.name

という事で、attr_accessorは、引数で指定した名前のsetter/getterを自動で定義してくれる命令です。

投稿2017/10/02 08:22

mingos

総合スコア4025

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

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

koume

2017/10/02 10:45

詳しい回答ありがとうございます。自分の理解が間違っていたようですね。もう少し勉強してみます。 今後とも宜しくお願いします。
amnmsht

2017/10/21 12:03

コメント失礼します。 全くの初心者何ですが、私も同じところで悩んでいました。 こちらの回答を見てやっと腑に落ちました^^
guest

0

参考情報

  • Rubyのattr_accessor等について

https://qiita.com/jordi/items/7baeb83788c7a8f2070d

  • これで完璧!rubyのattr_accesorの使い方

https://www.sejuku.net/blog/14168

投稿2017/10/21 13:17

katoy

総合スコア22324

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

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

koume

2017/10/22 03:24

ありがとうございます。参考にさせていただきます。今後とも宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問