form_with
form_withとhidden_field
app/views/users/_follow.html.erb
<%= form_with(model: current_user.active_relationships.build, local: true) do |f| %> <div><%= hidden_field_tag :followed_id, @user.id %></div> <%= f.submit "Follow", class: "btn btn-primary" %> <% end %>
app/views/users/_unfollow.html.erb
<%= form_with(model: current_user.active_relationships.find_by(followed_id: @user.id), html: { method: :delete }, local: true) do |f| %> <%= f.submit "Unfollow", class: "btn" %> <% end %>
app/controllers/relationships_controller.rb
class RelationshipsController < ApplicationController before_action :logged_in_user def create user = User.find(params[:followed_id]) current_user.follow(user) redirect_to user end def destroy user = Relationship.find(params[:id]).followed current_user.unfollow(user) redirect_to user end end
「form_for, form_with」では、コントローラーで作成したインスタンスがnewメソッドで新たに作成され、 何も情報を持っていなければ自動的にcreateアクションへ、editアクションなどで作成され、 すでに情報を持っている場合はupdateアクションへ自動的に振り分けてくれる?
followed_idをヘルパーから受け取る必要があるのでhidden_fieldを用いてコントローラで処理
直接的に入力してもらわない