Udemyのこちらのコースを受けながら、疑問に思ったこと、調べた結果、大事なことをまとめていきます。
part4-1 リスティングモデルの作成
rails g model Listing home_type:string pet_type:string pet_size:string breeding_years:integer address:string listing_title:string listing_content:text price_pernight:integer active:boolean user:references
rails g model はテーブルを新たに作成する。
rails g migration は今あるテーブルにカラムを追加する感じ。
最後に書いた user:references のおかげでuser_idカラムも追加されている。他のテーブルとの結びつけだ。
これを行うとlisting.rbができ、中身はこんなん。userに所属しているって書いてある。これはuser:referencesを書いたから。
class Listing < ApplicationRecord
belongs_to :user
end
userとlistingの関係。
userは複数のlistingを持てる。なので、
hasmany :listings
をuser.rbに追記。モデルね。
必須項目の設定
validates :home_type, presence:true
モデルファイルに書くことで必須にできる。
自己課題
- 上記のlistingモデルの作成
- validateの設定
part4-2-1 リスティングコントローラーの作成1
rails g controller Listings index show new create edit update
resource :listings
とすると、routesを自動生成してくれる。
resources :pages
pages GET /pages(.:format) pages#index
POST /pages(.:format) pages#create
new_page GET /pages/new(.:format) pages#new
edit_page GET /pages/:id/edit(.:format) pages#edit
page GET /pages/:id(.:format) pages#show
PUT /pages/:id(.:format) pages#update
DELETE /pages/:id(.:format) pages#destroy
ログインしていないと、シッターになれないようにする。
listingコントローラーに
before_action :authenticate_user!
と書くと、ログインしていないと次に行けなくなります。
自己課題
- リスティングコントローラーの作成
-navbarにシッターになるを追加。(ログインしているとき。)
part4-2-2 リスティングコントローラーの作成2
自己課題
- ログインページの重複を消す。facebookとmesseage
part4-2-3 リスティングnewページを整える
自己課題
part4-3-1 リスティングcreate
listingコントローラーに追記。
def new
#現在のユーザーもlistingの作成
@listing = current_user.listings.build
end
def create
#パラメーターととと現在のユーザーのlistingを作成
@listing = current_user.listings.build(listing_params)
if @listing.save
redirect_to edit_listing_path(@listing), notice: "リスティングを作成・保存しました。"
else
redirect_to new_listing_path, notice: "リスティングを作成・保存できませんでした。"
end
end
def edit
end
def update
end
private
def listing_params
params.require(:listing).permit(:home_type, :pet_type, :breeding_years, :pet_size)
end
自己課題
- シッター情報を入力し、保存できるようにする。
part4-3-2 createした後に飛ぶページを変更する
もっと新たな情報を入力するために新しいページを作成する。
path manage-listing_basics
URL manage-listing/:id/basics
action listings#basics
のページを作成しようと思ったら、以下のコードをroutes.rbに記入。
get 'manage-listing/:id/basics' => 'listings#basics', as: 'manage-listing_basics'
自己課題
- routesとviewを作成
part4-4 リスティング編集ページ(basics)
自己課題
part4-5-1 リスティング編集ページ(リスティング内
自己課題
- descriptionアクションを追加。ルートもね。
part4-5-2 リスティング編集ページ続き
controller内で共通の変数をもつ場合。
private の下に適当に関数を定義。set_listingとしたら、
before_action :set_listing, only:[:basics, :description, :address, :price, :photos, :calender, :bankaccount, :publish]
以下のコードを上に書くことによりまとめることができる。
自己課題
- すべてのactionに対し、ルート、verticalnavberにリンク。
part4-6 verticalナブバーのactive
表示しているページがnavbar上でわかるようにしたい。
この記述をhelpers/application_helper.rb加える。
helperに関数をかけば、全てのページで呼び出せるようになる。
module ApplicationHelper
def controller?(controller) #controller?という関数名でcontrollerという引数を持っている。
controller.include?(params[:controller]) #引数のcontrollerの中に、
# 現在のコントローラー(後ろのコントローラー :controllerのこと)が含まれていたら、True.
end
def action?(action)
action.include?(params[:action])
end
end
vertivalnavbarの一つ一つの要素にこれを書く。
<li class = "<%= 'active' if controller?("listings") && action?("basics") %>" >
<%= link_to"基本事項", manage_listing_basics_path(@listing) %>
</li>
controller?とactionがTureならば、activeが追加される。
add class nav active stackflow railsとかでググれば出てくる。ググり力大事。
自己課題
- verticalnavbarに、見ているページにactiveクラスを追加。