woshidan's blog

あいとゆうきとITと、とっておきの話。

Ruby on Railsのチュートリアル8(少し自分で書いてみていた)

昨日はpullリクエストを自分のリポジトリで出してみたり、

issueを立てたり、サンプルアプリの演習でも結構自分で調べてコード書いてみたり

(写経の解読だけではなく。せいぜい10行ちょいくらいかもだけれど)、それでできたバグをつぶしたりして、少しはどこで何してるかわかった気になったけれど、進捗が。

で、質問しようとissueを立てていて、書いているうちに整理されて

自分で解決するというクマさんデバッグみたいなことをしていた……。。

あと二章がんばるぞー(棒)

 

ところで、自分のgithubアカウント、姓と名が逆ね……?

 

テストについて

lefはbeforeブロックの中に書けない

visitなどページを飛んだりするものはbeforeブロックの中に囲んでいないと動かない。

基本的にbeforeの中の命令以外は順々に書いてあっても一行処理したら、

次の一行は前の一行を処理するときと同じ条件で行っているため。

 

ビューでメソッドや変数を使う

@var(インスタンス変数)。インスタンス変数は定義されたクラスの中で共有されるので、コントローラのクラスの中(だいたいcontroller.rbファイルに書いた関数郡)で共有される。ビューの中で使うには、コントローラの中のビューを呼び出すアクションを定義しているところで@varの値を設定する。

ヘルパーの中のメソッドはmoduleに属していて、だいたいどこからでも呼び出せる。

さて、module中のメソッドのインスタンス変数はどこの値を使うんでしょう……。

 

初期化で属性のデフォルト値と違う値を指定してもデフォルト値と同じ値になってるデータができてる

https://github.com/woshidan/sample_app/issues/5

↑いじいじしてたそれ。 

 

db/migrate/timestamp_add_admin_to_users.rbの中に

class AddAdinToUsers < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

としてデフォルトでは、admin: falseと設定していたのですが、

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
    admin = User.create!(name: "Example User",
                         email: "example@railstutorial.jp",
                         password: "foobar",
                         password_confirmation: "foobar",
                         admin: true)    
    99.times do |n|
      name  = Faker::Name.name
      email = "example-#{n+1}@railstutorial.jp"
      password  = "password"
      User.create!(name: name,
                   email: email,
                   password: password,
                   password_confirmation: password)
    end
  end
end 

のように初期化するときadmin: trueとしておいら大丈夫だろうと思って、

run rake db:reset
run rake db:migrate
run rake db:populate

したところ、コンソールで確認したらこの最初のユーザのadminが falseとなっていた。どうしようかな、と思って検索したところ、

カテゴリー :未分類 Ruby on RailsでWebサイト公開!に挑戦中

にならって、


                         password_confirmation: "foobar")
    admin.toggle!(:admin)

と後から変更。そしたら、trueになりました。なんでだ。