応用的な画面やフォームを作成できるようになる~2~

ルーティングにアクションを追加 - Ruby on Rails入門

使用するアクションへのルーティングだけを設定 - Ruby on Rails入門

 

Comment

viewのなかで2つもrenderしたり、

<%= render 'comments/index', { blog: @blog, entry: @entry } %>

<%= render 'comments/new', { blog: @blog, entry: @entry } %>

この後@comments,@commentを使うからこのviewを呼び出したところで変数定義しておいたり、

def show
@comments = @entry.comments
@comment = Comment.new
end

**_controllerごとにparamsのidが変更して行ったり

def set_blog
@blog = Blog.find(params[:blog_id])
end

def set_entry
@entry = Entry.find(params[:entry_id])
end

def set_comment
@comment = Comment.find(params[:id])
end

Approveアクションを自分で追加したり

resources :comments, only: [:create, :show, :edit, :update, :destroy] do
get 'approve'
end
<td>(承認待ち)</td>
<td><%= link_to 'Approve', blog_entry_comment_approve_path(@blog, @entry, comment) %></td>
def approve
@comment = Comment.find(params[:comment_id])
@comment.status = "approve"
@comment.save
redirect_to blog_entry_path(@blog, @entry)
end

 

結構イメージ通り作ってみて動作することがわかった、

binding.pry使ってデバックして解決していけば結構進む!

見た目についてはそんなに触れていないけど

コネクトの仕方が身についたのは大きいかな

 

最後引っかかり続けたところ

redirect_to blog_entry_path(@blog, @entry)

@blog,@entryは勝手に識別してくれるわけじゃなくて何番目の引数であるかってことでURL作られるらしい(よく考えれば当たり前)

/blog/@blog/entry/@entryって感じ!

最後まで気づかないで逆にしてたからそれはまあできないわな・・・って感じだった

 

練習完成品:GitHub - Yamashita0412/model-test