获取" Param丢失或值为空:user"错误

时间:2018-02-16 16:33:30

标签: ruby-on-rails ruby

我是Ruby on Rails的新手,我无法弄清楚如何正确路由它。我一直收到这个错误:

param is missing or the value is empty: user
app/controllers/user_controller.rb:72:in 'user_params'
app/controllers/users_controller.rb:27:in 'create'

这是第27行:

def create
  @user = User.new(user_params)
  ...
end

这是第72行:

# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:name, :email)
end

这是_form.html.erb文件:

<%= form_with(model: user, local: true) do |form| %>
  <% if user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :name %>
    <%= form.text_field :name, id: :user_name %>
  </div>

  <div class="field">
    <%= form.label :email %>
    <%= form.text_field :email, id: :user_email %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

有人可以用简单的语言向我解释我做错了什么吗? 谢谢。

2 个答案:

答案 0 :(得分:0)

你应该写这样的表格 = form_for @user do |f| @user是User模型的新对象。最好在new操作

中创建它

答案 1 :(得分:0)

您未包含视图 views / users / new.html.erb (包含该表单的视图)。没有它,我们无法知道是否已设置部分(_form.html.erb)局部变量user

您可以在许多建议的表单中更改user @user,但这不是一个好方法。您可以在视图中使用实例变量,但如果您调用部分&lt;%= render ....%&gt;,则应该实例化您需要的变量,而不是依赖于全局@variables。这样您就可以更轻松地重用部分。

所以你应该这样做:<%= render partial: 'form', locals: { user: @user },假设你在 UsersController #new

中创建了一个新的@user(@user = User.new