Ruby on Rails Tutorial (30)
朝練エントリです。signup から、ということにて。
ええと、app/views/static_pages/home.html.erb の以下なリンクが signup のソレ。
<%= link_to "Sign up now!", signup_path, class: "btn btn-large btn-primary" %>
signup_path は bundle exec rake routes によれば以下。
signup /signup(.:format) users#new
users#new とのこと。なので app/controllers/users_controller.rb の new アクションですね。
def new @user = User.new end
これは app/views/users/new.html.erb が、ってことになるはず。これは signup な form のはずなんですが、submit したらどうなるかがアレ。このあたり、テキストに記述があるはずなんだけどな、と言いつつググッてみたら以下な例がナニ。
<%= form_for(@user) do |f| %> <% end %> # <form action="/users" class="new_user" id="new_user" method="post"> # </form>
http://railsdoc.com/form より引用
ええとテキストの Chapter 7 も確認してみます。と以下な記述がありますね。
Recall from Section 7.1.2 that adding resources :users to the routes.rb file (Listing 7.3) automatically ensures that our Rails application responds to the RESTful URIs from Table 7.1. In particular, it ensures that a POST request to /users is handled by the create action. Our strategy for the create action is to use the form submission to make a new user object using User.new, try (and fail) to save that user, and then render the signup page for possible resubmission.
7.3.1 A working form より引用
/users への POST リクエストは create なアクションが云々、とのこと。app/controllers/users_controller.rb の該当部分の定義は以下。
def create @user = User.new(params[:user]) if @user.save sign_in @user flash[:success] = "Welcome to the Sample App!" redirect_to @user else render 'new' end end
成程。あるいは signup が成功した場合は 7.4.1 The finished signup form によれば
Note that we can omit the user_url in the redirect, writing simply redirect_to @user to redirect to the user show page.
7.4.1 The finished signup form より引用
とのこと。ええと redirect_to ですが http://railsdoc.com/references/redirect_to によるとこんな例は無いですなw
ただ上記引用によればその通り、なのか。rake routes によれば show なソレは以下なので
user GET /users/:id(.:format) users#show
params[:id] には @user.id が渡るようよしなに、なのかな。あるいは params[:page] にも最初のページな値が格納されるようよしなにとりはからってくれているのかどうなのか。あるいは直接 app/views/users/show.html.erb が云々、なのかな。
とは言え、中身を確認してみるにやはり controller を介する形になるはず。
ちょい理解微妙なので
ここを断点としときます。可能であれば色々確認してみます。