2016-07-13 5 views
0

ログインとサインアップフォームは同じページにあります。どのフォームが記入されているかに基づいて、どの「投稿」ルートを取るべきかを指定しようとしています。登録フォームの投稿をcreate_userアクションに送信し、ログインフォームの投稿を作成アクションに送信する必要があります。ビューで指定したものとは関係なく、何らかの理由でフォームを作成します。create_userアクションは、ログインフォームの場合でも同様です。ルートは経路を指定します

ルート:

get '/login' => 'sessions#new', as: :users 
    post '/login' => 'sessions#create_user' 
    post '/login' => 'sessions#create' 

ビュー:

<div class="forms"> 

    <div class="login"> 

     <h3>Login</h3> 

     <%= form_for(:session, url: {action: "create"}) do |x| %> 
      <%= x.email_field :email, :placeholder => " Email", :style => "height:50px; width:350px; border: solid #ff4d4d; background-color:#eff5f5; margin-top:20px; padding-left:5px;" %> 
      <%= x.password_field :password, :placeholder => " Password", :style => "height:50px; width:350px; border: solid #ff4d4d; background-color:#eff5f5; margin-top: 35px; padding-left:5px;" %> 
      <%= x.submit "Login" %> 
     <% end %> 

    </div> 

    <div class="divide"></div> 

    <div class="signup"> 

     <h3>Signup</h3> 

     <%= form_for @new_user, url: {action: "create_user"} do |x| %> 
      <%= x.text_field :name, :placeholder => " Name", :style => "height:50px; width:350px; margin-top:20px; border: solid #ff4d4d; background-color:#eff5f5; padding-left:5px;" %> 
      <%= x.email_field :email, :placeholder => " Email", :style => "height:50px; width:350px; margin-top:35px; border: solid #ff4d4d; background-color:#eff5f5; padding-left:5px;" %> 
      <%= x.password_field :password, :placeholder => " Password", :style => "height:50px; width:350px; margin-top:35px; border: solid #ff4d4d; background-color:#eff5f5; padding-left:5px;" %> 
      <%= x.submit "Submit" %> 
     <% end %> 

    </div> 

</div> 

コントローラー:あなたはそれは奇妙やっているが、これは動作するはず

class SessionsController < ApplicationController 
def new 
    @new_user = User.new 
end 

def create 
    @user = User.find_by_email(params[:session][:email]) 
    if @user && @user.authenticate(params[:session][:password]) 
     session[:user_id] = @user.id 
     redirect_to '/' 
    else 
     render '/login' 
    end 
end 

def create_user 
    @new_user = User.new(user_params) 
    if @new_user.save 
     session[:user_id] = @new_user.id 
     redirect_to '/' 
    else 
     render '/login' 
    end  
end 

def destroy 
    session[:user_id] = nil 
    redirect_to '/login' 
end 

private 
def user_params 
    params.require(:user).permit(:name, :email, :password) 
end 

答えて

0

。 。 。

変更この:これに

<%= form_for @new_user, url: {action: "create_user"} do |x| %> 

<%= form_for @new_user, url: url_for(controller: 'sessions_controller', action: 'create_user') do |x| %> 

あなたはおそらく別のコントローラ(がUserController)にcreate userものを移動することを検討すべきです。ルートを適切に設定する場合は(resources :usersを追加)、投稿するコントローラ/アクションを教えずにform_for @new_userを使用するだけです。

+0

ユーザーリソースを追加し、新しいcreate_userアクションをユーザーコントローラーに移動した後で、今は引数エラーが発生しています。セッションの新しいビューで変数が使用されている間に '@new_user'変数を使用していると思いますユーザに新規作成およびアクションを提示する。これをどうやって解決するのですか? @Ecnalyr – nums

+0

@numsそれは別の問題だから、スタック交換の正しいエチケットは、この正しい応答を投票し、それを正しいものとしてマークし、新しい質問をすることを示唆している。 – Ecnalyr

+0

それでは、新しい質問にリンクして回答に役立ててもらえますか? @ Ecnalyr – nums

関連する問題