るびらな!

RubyをLearnする人の勉強記録。(超)弩(級の)素人なので、誰かダメさがわかる人に罵ってもらったりして、少しずつ知見を広げたいと思っています。

行き詰った結果。

RailsTutorial、最初からちょっとやり直してみようかと思います。

ということで、GitHub上のリポジトリを消して、再度同じ名前のリポジトリを作ってやってみることにしました。

これでまた行き詰ったら、今度はRailsガイドのほうをやってみようと思います。


Nagg23/sample_app · GitHub

多忙化したけど、RailsTutorial進めた

さて、ちょっと週末すら休めない日々が続いていて厳しいのですが、ちょこっと進めたので備忘録。

まずは、mhartl自身の作ったRails4向けのRailsTutorialのリポジトリを検索して発見。


railstutorial/sample_app_rails_4 · GitHub

ということで、このリポジトリをローカルにクローンして、users_controllerを比較しながら、すでに終わってる部分に関係しそうなあたりをぺぺっと書いてみた。

class UsersController < ApplicationController
  before_action :signed_in_user,
                only: [:index, :edit, :update, :destroy, :following, :followers]
  before_action :correct_user,   only: [:edit, :update]
  before_action :admin_user,     only: :destroy

  	def index
  		@users = User.paginate(page: params[:page])
  	end

	def show
		@user = User.find(params[:id])
	end
	
	def new
		@user = User.new
	end

	def create
		@user = User.new(params[:user])
		if @user.save
			sign_in @user
			# 保存の成功をここで扱う。
			flash[:success] = "Welcome to the Sample App!"
			redirect_to @user
		else
			render 'new'
		end
	end

	private
	
	def user_params
		params.require(:user).permit(:name, :email, :password, :password_confirmation)
	end

	def correct_user
		@user = User.find(params[:id])
		redirect_to(root_url) unless current_user?(@user)
	end

	def admin_user
		redirect_to(root_url) unless current_user.admin?
	end
end

累積和・しゃくとり法ってそういうことだったのか!

いやぁ、私も挑戦したんですよ。POH vol.4!

でも、結婚はできたけど箱根までしか行けなかったんですよ。

あのほら、アルゴリズムってよくわかってなかったから…orz

そこまで勉強してる時間が、今のところないしね。


と残念に思っていたら、paizaの人が解説してくれました!


【累積和、しゃくとり法】初級者でも解るアルゴリズム図解 - paiza開発日誌


いろんなWebサイト見たんだけど全然わからなくて困ってました。

ほんと、この解説わかりやすい!

そういう計算の仕方があったのね! というすごく納得できた感じです。



あ、RailsTutorial? 進んでませんよ…

ほんと、15時間も仕事とかまじで何なのか全くわかりません。

来月上旬まではこんな感じが続きそうです。マジキチ…

よ、よくわからないぞ… paramsの中身はどこへ行った?!

さて、前回(というか昨日)の記事の通り、mhartlの作ったsample_appをgit cloneしてきました!


やっと落ち着いてRailsTutorialを進めたものの… - るびらな!

そして、cloneしたusers_controller.rbを見ました。ででーん!

class UsersController < ApplicationController
  before_filter :signed_in_user,
                only: [:index, :edit, :update, :destroy, :following, :followers]
  before_filter :correct_user,   only: [:edit, :update]
  before_filter :admin_user,     only: :destroy

  def index
    @users = User.paginate(page: params[:page])
  end

  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end

  def edit
  end

  def update
    if @user.update_attributes(params[:user])
      sign_in @user
      flash[:success] = "Profile updated"
      redirect_to @user
    else
      render 'edit'
    end
  end

  def destroy
    User.find(params[:id]).destroy
    flash[:success] = "User destroyed"
    redirect_to users_path
  end

  def following
    @title = "Following"
    @user = User.find(params[:id])
    @users = @user.followed_users.paginate(page: params[:page])
    render 'show_follow'
  end

  def followers
    @title = "Followers"
    @user = User.find(params[:id])
    @users = @user.followers.paginate(page: params[:page])
    render 'show_follow'
  end

  private

    def correct_user
      @user = User.find(params[:id])
      redirect_to root_path unless current_user?(@user)
    end

    def admin_user
      redirect_to root_path unless current_user.admin?
    end
end

なんだか見た記憶がないメソッドがいっぱい書いてある…editとかupdateとかdestroyとかなんとか。

でも、たぶん先の章で作る予定の部分なんだろうなぁ…と思いながら、全体を眺めてみるも…

これ、params[:id]の中身を定義してなくない?!

それでエラーはいてるのに、なんでこれでいいことになってるの?!

ってよくgemfileを見たら、これRails3.2で書かれてるのね。

Rails4.0以降ではparamsの内容をちゃんと定義してあげないといけなくなってるのに、それに対応してないんじゃね?っていう。

もうちょっとしばらくググりながら、理由を調べる必要がありそうです。

やっと落ち着いてRailsTutorialを進めたものの…

第7章に書かれている内容は全て進めてきたものの、相変わらずのActiveModel::ForbiddenAttributesErrorですよ…

なんでなんだろう??と思いますが、たぶんMCVのうちV以外の部分の問題、というかおそらくController周りの問題なんじゃないかと思っているので、ちょっと時間を見てmhartl自身が作ったリポジトリからソースを全部クローンしてきて、比較してみようと思います。

そのリポジトリはこちら。

mhartl/sample_app · GitHub

まじhartlイケメン。…あ、違う違う。見るとこ違いますよー。

明日またがんばる!

エラーが出たことが正しいってことに気づいてしまった…

今日は飲み会で今帰宅したんで、もちろんRailsTutorialを進めようってことにはならないんですけど、

軽く読み進めたら、エラーが出ていることが正しい状況だってことに気づいてしまいました。

すなわち、Michael Hartl的には、ぼくのいまの進捗状況ではエラーが出ていることが正しく、ここからエラーが出ない状態にしていこう、ということのようです。(ちょっとRailsTutorialの先の部分を読んでみた)

ということで、明日だか土曜だか日曜だか、まだ先が見えませんが、RailsTutorialを遠慮なく進めていきたいと思います。


ということで酔っぱらいはもう寝ます。

今日は特に進まなかった…

今日は仕事が山積みで、昼ご飯食べながら書類書いたりしつつがんばったけど、結局13時間くらい休憩なしで働いて、でも仕事が終わらないので諦めて帰宅。残業代? なにそれおいしいの? もらったことないですよ…

ということで、帰宅後ちょこっとRailsTutorialを進めようと思うも、問題が…

ActiveModel::ForbiddenAttributesError!!!!!


またお前か!!!

ということで、いろいろ調べながら頑張ったんですよ。

def member_params
 params.require(:member).permit(:number,:name,:Full_name,:gender,:birthday,:email,:administrator)
end

こんな風に、パラメータの許容するパラメータ名とキー名をハッシュで渡してあげるといいよーとか、Rails3.x系からRails4.x系へのバージョンアップ時の注意が書いてある記事を見つけて試してみたりとか、いろいろね。

もうほんと、書き換えたり戻したりしまくってるので、git様様です。

まじgit神。

戻したいときの状態まで一発で戻ってくれるって、なんて便利なんだろうって感じです。


ということで、本筋は微塵も進んでません。


そして、明日も出張のため、微塵も進まない予感しかしません。

というか、100%進まないでしょう!(デデーン


ということで、また頑張れるのは週末のような気がします…!!