qiita初投稿です。多分書き方間違えているのですが、徐々に覚えていこう位の気持ちでアウトプットします汗
最近プログラミングスクールに通い始めたばかりなので、割と(多分こうだろう!)ということが多いです。
経験豊富な諸先輩方よりご指導頂ければ幸いです。
routes.rb
resources :user, only: :show do
resources :blogs, only: [:new, :create, :update, :edit, :destroy, :show]
end
・userでblogをネスト
・そうするとurlが "/user/:user_id/blogs/:id" みたいになる。
・user_idが入る隙間が出来る(?)
blogs_controller.rb
def new
@blog = Blog.new
@user = User.find(current_user[:id])
end
Blogモデルの空インスタンスを作成・代入・new.html.erbに送る。
Usertテーブルから現在ログイン中ユーザのレコードを代入・new.html.erbに送る。
new.html.erb
<%= form_with model: [@user, @blog], local: true do |form| %>
<h2>タイトルを入力してください</h2>
<%= form.text_area :title, placeholder: "タイトル" %>
<h2>投稿内容を入力してください</h2>
<%= form.text_area :text, placeholder: "投稿内容" %>
<%= form.submit %>
<% end %>
・親が第一引数、子が第二引数
・Blogモデルのインスタンスはここで入力された値にカラム値を上書き(?)される。\
・インスタンスが送られるというか、カラム(キー)という箱が送られる(?)\
・キーとバリューのセットになって丸ごとcreateアクションへ飛ぶ。
blogs_controller.rb
def create
Blog.create(blog_params)
redirect_to controller: :blogs, action: :index
end
private
def blog_params
params.require(:blog).permit(:text, :title).merge(user_id: params[:user_id])
end
※今回は親:user,子:blogsでアソシエイトを組んでいます。
※rails4以降(?)、アソシエイトを組んでいる場合は、paramsの中に親のidが入っていない場合、createした瞬間に
rollbackされる。つまり保存されない。要注意。margeの部分は必須ということ。