我正在尝试创建一个用于创建用户记录的基本表单:
<%= debug(@user) %>
<%= form_for @user, url: {action: "create_user"}, html: {class: "user-create-form"} do |f| %>
<div class="form-group"><%= f.text_field :first_name, class:'form-control' %></div>
<div class="form-group"><%= f.text_field :last_name, class:'form-control' %></div>
<div class="form-group"><%= f.text_field :email, class:'form-control' %></div>
<div class="form-group"><%= f.text_field :password, class:'form-control' %></div>
<%= f.submit "Update" %>
<% end %>
在控制器中:
def create_user
@user = params[:user]
@user = User.new if !@user
end
这样可以正常加载而且没有错误,但是当我提交表单时,我收到以下错误:
NoMethodError in Admin#create_user
Showing /Applications/MAMP/htdocs/clippo2/app/views/admin/create_user.html.erb where line #6 raised:
undefined method `model_name' for ActionController::Parameters:Class
Extracted source (around line #6):
<%= form_for @user, url: {action: "create_user"}, html: {class: "user-create-form"} do |f| %>
这是我的路线:
get "admin", to: "admin#index"
get "admin/edit_user/:id", to: "admin#edit_user"
patch "admin/edit_user/:id", to: "admin#edit_user"
get "admin/create_user"
post "admin/create_user"
get "admin/delete_user"
get "access/login"
get "access/logout"
post "access/attempt_login"
root :to => 'pages#home'
答案 0 :(得分:1)
Extracted source (around line #6):
<%= form_for @user, url: {action: "create_user"}, html: {class: "user-create-form"} do |f| %>
form_for
接受ActiveRecord
类的对象。但是你在create_user
行动中的控制器中犯了一个错误。
create_user
操作中的@user变量不是active_record
的对象,因为您要为其分配params[:user]
哈希值。
更改您的代码:
def create_user
@user = User.new
end
答案 1 :(得分:0)
create_user
需要params[:user']
才能运行,因此无需检查参数。一个简单的修改:
def create_user
@user = User.new(params[:user])
end
如果params不存在,为什么你会通过User.new
? create_user
应该是一个仅限帖子的路线。您需要User.new(params[:user])
,因为如果验证失败,您将把该对象传递回包含错误和现有输入的表单。
在此处更改路线:
get "admin/create_user" => get "admin/new_user"
然后在控制器中为new_user
创建一个新方法:
def new_user
@user = User.new
end
您也在以错误的方式构建路线。使用资源:
namespace :admin do
resources :user
end
有关详细信息,请参阅this guide。