前提・実現したいこと
Ruby on RailsでQiitaのようなレイアウトのサイトを作成しようとしています。
Qiitaのように、トップページ(https://qiita.com/)とユーザー登録ページ(https://qiita.com/signup?redirect_to=%2F)の両方にユーザー登録フォームを設置したいと思っています。
現在、
- トップページは
TopPage
コントローラおよびTopPage
ビュー - ユーザーページは
Users
コントローラおよびUsers
ビュー
という構成なのですが、
トップページからUsers
コントローラにリクエストを送信するフォームを設置する方法がわかりません。
解決策、そもそも設計がよくない、理解が間違っているなどありましたらご教授いただけると幸いです。
発生している問題・エラーメッセージ
ArgumentError in TopPage#home First argument in form cannot contain nil or be empty <%= form_for(@user, url: {controller: "users", action: "new"}) do |f| %>
該当のソースコード
TopPage
コントローラ
ruby
1class TopPageController < ApplicationController 2 def home 3 end 4end
TopPage
ビュー
ruby
1<%= form_for(@user, url: {controller: "users", action: "new"}) do |f| %> 2 <ul> 3 <li> 4 <label>ユーザー名</label> 5 <%= f.text_field :name, placeholder: "taro yamada" %> 6 </li> 7 <li> 8 <label>メールアドレス</label> 9 <%= f.email_field :email, placeholder: "yamada@example.com" %> 10 </li> 11 <li> 12 <label>パスワード</label> 13 <%= f.password_field :password, placeholder: "********" %> 14 </li> 15 <li> 16 <%= f.submit "ユーザー登録", class: "submit" %> 17 </li> 18 </ul> 19<% end %>
Users
コントローラ
ruby
1class UsersController < ApplicationController 2 def show 3 @user = User.find(params[:id]) 4 end 5 def new 6 @user = User.new(user_params) 7 end 8 9 private 10 11 def user_params 12 params.require(:user).permit(:name, :email, :password, 13 :password_confirmation) 14 end 15 16end
- routes.rb
ruby
1Rails.application.routes.draw do 2 root 'top_page#home' 3 get '/signup', to: 'users#new' 4 resources :users 5 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 6end
試したこと
(1) form_for
の対象にUsers
のnew
アクションを指定する
ruby
1<%= form_for(@user, url: {controller: "users", action: "new"}) do |f| %>
→ArgumentError
が表示されます。
(2) TopPage
のview内で@user
を宣言する
ruby
1<% @user = User.new %> 2<%= form_for(@user, url: {controller: "users", action: "new"}) do |f| %>
→上記コードではArgumentError
は表示されなくなりますが、
結局user_params
メソッドを読み込めませんでした。
補足情報(FW/ツールのバージョンなど)
Ruby on Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/04/05 04:51