LoginSignup
9
9

More than 5 years have passed since last update.

ちょっとRuby on Railsの流れが見えてきた(気がする)

Last updated at Posted at 2015-06-27

本を読みながらコード書いたり、動かしたりしていても細かい動きが解らなくて、わかったようなわからないようなそんな感じだったのですが、細かく見ていくと何となく見えてきたような。。。
理解が足りないところなど、ご指摘いただければ助かります。

UsersController.rb
  def index
    @users = User.all
  end
index.html.erb
<h1>Users</h1>

<ul>
  <% @users.each do |u| %>
    <li>
      <%= link_to u.name, user_path(u.id) %>
    </li>
  <% end %>
</ul> 

コントローラのindex内で作られた@usersをビューのindex.html.erbに渡す流れなのですが、こう単純に見ると繋がりが見えやすいと思います。
コントローラのindex内で明示的にrenderを書かないと対応するテンプレートが自動で呼び出されるそうです(index.html.erb)。

index.html.erb
<h1>Users</h1>

<ul>
  <% @users.each do |u| %>
    <li>
      <%= link_to u.name, user_path(u.id) %>
      <%= link_to "[Edit]", edit_user_path(user.id) %>
    </li>
  <% end %>
</ul> 
UsersController.rb
  def edit
    @user = user.find(params[:id])
  end

link_to "[Edit]", edit_user_path(user.id)からedit_user_path(user.id)にページ移動する時のedit内のparams[:id]。ここのparamsはリンクによるパラメータの受け渡しでparams[:id]edit_user_path(user.id)の受け渡しをしているみたいです。

user.rb
class User < ActiveRecord::Base
  validates :name, presence: { message: "未入力" }, 
                      length: { minimum: 3, message: "3文字以上" }
end
edit.html.erb
<h1>Edit</h1>
<%= form_for @user do |f| %>
  <p>
    <%= f.label :name %><br>
    <%= f.text_field :name %>
    <% if @user.errors.any? %>
      <%= @user.errors.messages[:name][0] %>
    <% end %>
  </p>
  <p>
    <%= f.submit %>
  </p>
<% end %>
UsersController.rb

  def update
    if @user.update(user_params)
      redirect_to user_path
    else
      render 'edit'
    end
  end

  def edit
    @user = user.find(params[:id])
  end

  def user_params
    params[:user].permit(:name)
  end

edit@user = user.find(params[:id])でuser情報を保持してedit.html.erbを表示。form_forでフォームを生成、if @user.errors.any?でエラーのチェックをしてますが、Userモデルでのvalidatesの設定を見ているようです。@user.errors.messages[:name][0]で各エラーのmessage:を拾えるみたいです。f.submitはリファレンスによると、引数を指定しないと、対象のモデルが保存済みかを調べて、「Create モデル名」「Update モデル名」のどちらかを表示するようです。

9
9
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
9
9