kyopa’s blog

自分用プログラミングアウトプット

railsのsuper

class Human
def eat
puts "ご飯を食べた"
end
end
 
class Programmer < Human
def work
puts "コードを書いた"
end
end
 
programmer = Programmer.new
programmer.eat #=> "ご飯を食べた"
 
 
ひゅーまんクラス
プログラマークラスがある
 
プログラマークラスはヒューマンクラスを継承する
 
そうするとプログラマークラスでeatメゾットを使うことが可能
 
 
 
 
 
 
オーバーライド
 
親クラスヒューマンくらすを
子クラスで再定義すること(上書き)
 

 

 

上書きしたからプログラマーいーとには急いでご飯を食べたが呼び出された

 

 

しかし親クラスで定義したものをずっと使い続けたいケースがある。 

 

 

class Human
def sleep
puts "寝た"
end
end
 
class Programmer < Human
def sleep
super
puts "しかし何故かぐっすり眠れない"
end
end
 
programmer = Programmer.new
programmer.sleep
 
#実行結果
#寝た
#しかし何故かぐっすり眠れない
 
そうゆう時にsuperを使用する。

現実世界では、すべてのものは型からつくられる
 
たいやきもパソコンも型があって加工する
そんなイメージ
 
クラス  型 設計図                例  家 設計  
 
インスタンス(実体) 加工   例  作成 (家を)   
 
インスタンス 実装する     例  家を使う
 
 
たいやきの型 = クラス
 
たいやき = インスタンス
 
 
すでに定義されているクラスを拡張して新しいものを作る
継承という
 
オブジェクトの生成
2.4.0 :001 > class House
2.4.0 :002?>   end
=> nil
2.4.0 :003 > House.new
=> #<House:0x000000012c1360>
2.4.0 :004 > exit
 
 
メゾットを入れた場合はドアがかえってくる
 
2.4.0 :001 > class House
2.4.0 :002?>   def door
2.4.0 :003?>     end
2.4.0 :004?>   end
=> :door
2.4.0 :005 > House.new
=> #<House:0x00000000d6a600>   16進数で作られている。
2.4.0 :006 > exit
 
 
インスタンスを生成して連続性をもたせる
たくさん使うため
 
 
2.4.0 :001 > class House
2.4.0 :002?>   def door
2.4.0 :003?>     puts "Open the door."
2.4.0 :004?>     end
2.4.0 :005?>   end
=> :door
2.4.0 :006 > @house = House.new
=> #<House:0x00000000d61ed8>
2.4.0 :007 > @house.door
Open the door.
=> nil
 
 
 
メゾットを呼び出した時に
 
引数と戻り値2つ返答される
今回は
戻り値がないためぬるが返答された
 
 
puts(*arg) -> nil
 
ルビーはメゾットの最後に出力した値が戻り値となる
 
Putsは戻り値がぬると定義されている
デバックや引数を知りたいときに使用するため・・・
 
データを保持できるもの
そうする事でなんかいも生成しなくてもいい
複雑な処理をしなくてもいい
 
 
2.4.0 :001 > class Child
2.4.0 :002?>   def initialize(name)
2.4.0 :003?>     @name = name
2.4.0 :004?>     end
2.4.0 :005?>   end
=> :initialize
2.4.0 :006 > Child.new("ぱぱ")
=> #<Child:0x00000001986ad8 @name="ぱぱ">
2.4.0 :007 >
2.4.0 :008 >   
2.4.0 :009 >   Child.new("まま")
=> #<Child:0x0000000197dcf8 @name="まま">
2.4.0 :010 >
 

fizzbuzz

その1

 

def fizzbuzz(n)

  n.to_s

end

 

puts fizzbuzz(1)

 

 

定義してやる

 

 

その2

 

 

 

 

def fizz_buzz(n)
if n%15 == 0
'fizzbuzz'
elsif n%3 == 0
'fizz'
elsif n%5 == 0
'buzz'
else
n.to_s
end
end

puts fizz_buzz(1)
puts fizz_buzz(3)
puts fizz_buzz(5)
puts fizz_buzz(6)
puts fizz_buzz(7)
puts fizz_buzz(8)
puts fizz_buzz(9)
puts fizz_buzz(15)

 

 

if文で定義してやる

 

eachで書くとき

 

(1..30).each do |i|
if i%15==0
puts "fizz_buzz"
elsif i%3 == 0
puts "fizz"
elsif i%5==0
puts "buzz"
else
puts i
end

end

ですとろいおーるボタンを実装する

ルーター

delete :destroy_all

 

このように設定

 

 

HTTPメゾットの種類

 

  • GET   データを取得する処理
  • POST  お問い合わせなどでデータを送るとき
  • PUT   情報の削除
  • PATCH  情報を更新するときに使用
  • HEAD
  • DELETE
  • OPTIONS
  • TRACE
  • CONNECT

このくらいあるみたいです。

 

 

コントローラに定義

 

 

def destroy_all
@lucks = Luck.where(user_id: current_user.id)
@lucks.destroy_all
redirect_to user_path(current_user.id), notice:"全件リセットしました"
end

 

where値を取得します。ユーザーidとカレントユーザーidが一致しているというものを@lucksに入れる

@lucksにですとろいおーるを入れる

 

destroy_allの完成

 

 

 

<% if @user.lucks.count >= @target&.point %>
<h1>達成おめでとうございます</h1>
<%= link_to 'Destroy All', destroy_all_lucks_path, method: :delete %>
<% end %>

 

これで ビューで使えるようになりました。

rails 画像がなければデフォルトの画像を表示する方法

if文で画像が設定していなかった場合は

この画像を表示してくださいというコードを書く

 

<% unless @user.avatar.present? %>
<%= image_tag @user.avatar, :size => "280x330"%>
<% else %>
<%= image_tag('moon.jpg') %>
<% end %>

 

 

uploadersファイルの

avater_uploaders.rbに

この記述を記載する

 

 

def default_url
"moon.jpg"
end

 

 

 moon.jpg という名前で app/assets/images/ に保存する。

 

 

これでできます

無駄にアソシエーションすると

PG::UndefinedColumn: ERROR:  column categories_people.person_category_id does not exist LINE 1:

こんなかんじになる

アソシエーション組んでますけど、存在しませんよと

 

無駄にアソシエーションを組まないようにしよう