マッチングアプリを練習で作っているのですが、
足跡機能の作り方がわからず、困っていたけど、 出来たので、投稿します!
目的
足跡機能の実装
準備
User model作成
Footprint model作成
footprint.db
class CreateFootprints < ActiveRecord::Migration[5.2]
def change
create_table :footprints do |t|
t.string :visiter_id
t.string :visited_id
t.timestamps
end
add_index :footprints, :visiter_id
add_index :footprints, :visited_id
add_index :footprints, [:visiter_id, :visited_id], unique: true
end
end
routes
resources :users do
resources :footprints, only: [:index, :create]
member do
get :profile
get :follower
get :following
end
end
user.rb
class User < ApplicationRecord
has_many :footprints
footprint.rb
class Footprint < ApplicationRecord
belongs_to :user, optional: true
end
view,controller作成
viewについては、userのprofileを見たら、footprintがcreateされるようにする。
form_withを使って、profileページが開いたら、submitするようにセットする。
profile.html.haml
class Footprint < ApplicationRecord
:javascript
$("#footprint_js").trigger('click')
.body-white
.profile
= form_with model: @footprint, url: user_footprints_path(current_user) do |f|
= f.hidden_field :visited_id, value: @user.id
= f.hidden_field :visiter_id, value: current_user.id
= f.submit "", style: 'display:none', id: "footprint_js"
.profile-tittle
%h1 プロファールの設定
他省略、、
jsでクリックされる。
formは見えないようにdisplay:noneにする。
controllerは受け取るのみ
footprint.controller
def create
Footprint.create(footprint_params)
end
private
def footprint_params
params.require(:footprint).permit(:visiter_id, :visited_id)
end
footprint.rbでoptional: trueとしておかないと、createされないので、注意が必要。
以上、足跡機能でした。