2017-05-17 56 views
0

即使我的表單對象與我的控制器對象相匹配(大多數有此問題的人在相似的問題中混合了它們的對象),我仍然不斷收到上述錯誤。我在這裏做錯了什麼?繼續得到「參數丟失或值爲空」

我的代碼如下:

<!-- The form is here --> 
<%= form_for(@user), url: {action: "https://stackoverflow.com/users/signup"}, html: {class: "signup_form"} do |f| %> 
    <%= label_tag(:firstname, "Firstname: ") %> 
    <%= f.text_field :firstname %> 
    <%= label_tag(:lastname, "Lastname: ") %> 
    <%= f.text_field :lastname %> 
    <%= label_tag(:username, "Username: ") %> 
    <%= f.text_field :username %> 
    <%= label_tag(:email, "Email: ") %> 
    <%= f.text_field :email %> 
    <%= label_tag(:password, "Password") %> 
    <%= f.password_field :password %> 
    <%= f.submit "Create Account" %> 
<% end %> 

而這裏的控制器:

class UsersController < ApplicationController 
def create 
    @user = User.new(user_params) 

    @user.save 
    redirect_to @user 
end 

private 
    def user_params 
     params.require(:user).permit(:firstname, :lastname, :username, 
     :email, :password) 
    end 
end 

會很感激一些幫助,對不起,如果我錯過了一些愚蠢的在這裏,在此先感謝。

回答

0

users_controller.rb

class UsersController < ApplicationController 
def new 
    @user = User.new 
end 

def create 
    @user = User.new(user_params) 

    respond_to do |format| 
    if @user.save 
    format.html { redirect_to @user, success: 'Thanks for signing up!' } 
    format.json { render :show, status: :created, location: @user } 
    else 
    format.html { render :new } 
    format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
    end 
end 
end 

用戶/ _form.html.erb

<%= form_for(@user) do |f| %> 
<div class="field"> 
    <%= f.label :first_name, "First name" %><br> 
    <%= f.text_field :first_name %> 
</div> 
<div class="field"> 
    <%= f.label :last_name, "Last name" %><br> 
    <%= f.text_field :last_name %> 
</div> 
<div class="field"> 
    <%= f.label :email, "Email" %><br> 
    <%= f.text_field :email %> 
</div> 
<div class="field"> 
    <%= f.label :password, "Password" %><br> 
    <%= f.password_field :password %> 
</div> 
<div class="actions"> 
    <%= f.submit "Sign Up" %> 
</div> 
<% end %> 
0

爲什麼你有url: {action: "https://stackoverflow.com/users/signup"}的形式?這是更簡單,如果你做到以下幾點:

的routes.rb

Rails.application.routes.draw do 
    resources :user 
end 

的意見/用戶/ _form.html.erb

<%= form_for(@user), html: {class: "signup_form"} do |f| %> 

控制器/ users_controller.rb(加入以下內容)

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 
end 

如果你不喜歡這樣,form_for會自動檢測@user對象是否已被保存在數據庫中,並將路線的形式向createupdate方法分別。

我一般我不推薦改變標準的RESTful路線,除非絕對必要。用戶不太可能在URL中查看yoursite.com/users/new並且不高興或困惑。

相關問題