继续得到" Param丢失或值为空"

时间:2017-05-17 14:27:54

标签: ruby-on-rails ruby-on-rails-4

我一直收到上面提到的错误,即使我的表单对象与我的控制器对象匹配(大多数有这个问题的人在类似的问题中混合了他们的对象)。我到底错在了什么?

我的代码如下:

<!-- The form is here -->  
<%= form_for(@user), url: {action: "/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

非常感谢一些帮助,如果我在这里错过了一些愚蠢的事情,请提前感谢。

2 个答案:

答案 0 :(得分:0)

为什么表格中有url: {action: "/users/signup"}?如果您执行以下操作会更简单:

<强>的routes.rb

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

<强>视图/用户/ _form.html.erb

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

controllers / users_controller.rb (添加以下内容)

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

如果您这样做,form_for将自动检测@user对象是否已保存在数据库中,并将表单路由到create或{{ 1}}方法。

我是一般的我不建议改变标准的RESTful路线,除非绝对必要。用户不太可能在URL中查看update并感到不安或困惑。

答案 1 :(得分: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 %>