LoginSignup
2
1

More than 3 years have passed since last update.

user_idとcontentsの絡め方について(備忘録)

Last updated at Posted at 2019-06-13

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の部分は必須ということ。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1