木村勇土の備忘録

新たな発見・勉強になったこと・見分が広がったこと・覚えておきたいこと

imgaeの修正

taneppa.net

 

<style>
.img01.waku03 {
border: 10px solid #fff;
box-shadow: 0 0 0 1px #ccc,1px 3px 8px 0 rgba(40,40,40,0.3);
}
.waku03.rotate01 {
-moz-transform:rotate(-3deg);
-webkit-transform:rotate(-3deg);
-ms-transform:rotate(-3deg);
transform:rotate(-3deg);
}
.waku03.rotate02 {
-moz-transform:rotate(1deg);
-webkit-transform:rotate(1deg);
-ms-transform:rotate(1deg);
transform:rotate(1deg);
}
</style>
<p class="img01 waku03 shadow rotate01"><img src="photo.jpg" width="500" height="500" alt="ブランケットを羽織った女性" /></p>

続き⑤ 最後

①destroyアクションでエラーが出る場合は問題が2つ

1.削除が出来ているか

2.リダイレクトが出来ているか

 

→まず「redirect_to root_url」としてリダイレクト先をルートにしてみ

rails routesでアクションを確認する

 

続き④

1.アソシエーションの使い方

$ r = restaurant.first(このレストラン(今回は最初の)を定義)

$ r.user.comment.menu (このレストランのコメントの中のmenu)

ex.お気に入りの場合 

$ r.favorite_users[0].name(このレストランの最初のお気に入りした人)

$ r.favorite_users.first.name(同上)

 

ex.アソシエーションにsource: :userを書いてない場合

$ r.favorites.map{ |favorite| favorite.user.name }

(mapで配列で入ってくる)

※has_manyメソッドの変数は配列になっている

 

2. find_byとfindとwhereの違い

find(100)  → id:100がない場合はエラーになる

find_by(id: :100) → 100がなくても「nil」が返ってくる

where(id: :100 ) → 配列で返ってくる。なので何人も表示できる

上記により、findの変数は単数に、whereの変数は複数にするべき。

 

3.newとbuildの使い分け方

new: クラスとインスタンスでオブジェクトを作るとき

build: アソシエーションでオブジェクトを作るとき

rails idの紐づけ方  続き③

1.hidden_fieldを使うときは「:value => (値)」とする

<%= form.label :restaurant_id %>
<%= form.hidden_field :restaurant_id, :value => @current_restaurant_id %>

 

2.formのsubmitアクションにパラメーターを一緒に渡したいとき

<%= form.submit %>
<%= link_to "", comments_path(@current_restaurant_id ), method: :post %> ちゃんと渡せてる?

rails idの紐づけ方  続き②

rails c

$ Restaurant.find_by(name: "マック")

>マックの値が出る

$ mkd = Restaurant.find_by(name: "マック")

マックを変数mkdに入れる

$ mkd.comments.new     

>「変数。アソシエーション名.new」で新しくオブジェクトができる

その際、子要素として「restaurant_id」だけがオブジェクトに入る

rails idの紐づけ方

①templateはview自体にある。

controllerのindexアクション内に「render "indux"」を入れた場合、viewの「indux.html.erb」がindexメソッドがend後にrenderされる。

各コントローラーのメソッドはendで一旦終わり、各ヴューがrenderされる。

findメソッドは「探してくる」ではなく「その引数に紐づいた情報を持ってくる」。

 「find(直接数字) 又は find_by(:キー名)」(id以外で探すときはfind_by)

②ページの推移を追っていく

前の画面で送った情報は次の画面で一旦消えてしまう。

なので、情報を送る作業が必要となる。

パラメーターとして送っているので、params[: キー名]で受け取る。

③実際の解決法

1.comments_indexのVでnewを押すときにパラメーターを送る

2.comments_newのCでパラメーターを受け取る。

もしくは、アソシエーションでidを受け取ったまま、comments.newする。「変数.アソシエーション名.new」でインスタンスからnew出来る。

(変数の子のcommentsとしてnewされる)

  

restaurant_idの子としてcommentをするには方法2つ

index

 

rails 基礎

rails はデフォルトでget   postとdeleteはあえて書くこと

・検証ツールでRubyコードがどのように変わるか確認する

・get: 受け取るだけ

・post: 作成して送る

 

@restaurant = Restaurant(レストランモデルのクラス).new(restaurant_params)

上記で新オブジェクトができ、インスタンス変数に入っている

 

rails routes

routesで確認して「どのアクション」に送りたいかでget/post等のメソッドを判断する

(restaurantをshow送りたいときはgetで送る。)

・@restaurant = Restaurant.find(params[:id])

findで、もともとあるデータからid値に紐づくデータをRestrantモデルのクラスを通して、インスタンス変数に入れている

 paramsは(ログで確認)ハッシュで受け取っている。