我正在尝试为编辑视图创建一个表单,但是我得到了"第一个参数不包含nil或空为空"。
我对 new View 有类似的形式,可用于:
<%= form_for(@user, url: signup_path) do |f| %>
我想对使用共享表单,同时编辑和新,但我无法设法检索@user以使其正常工作。感谢您的帮助!
视图/用户/edit.html.erb>
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
<%= f.submit "Save changes", class: "btn btn-primary" %>
<% end %>
users_controller.rb>
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
flash.now[:danger] = 'There was an error updating your account, try again'
render 'edit'
end
end
routes.rb>
Rails.application.routes.draw do
root 'static_pages#home'
get '/about', to: 'static_pages#about'
get '/contact', to: 'static_pages#contact'
get '/signup', to: 'users#new'
post '/signup', to: 'users#create'
get '/login', to: 'sessions#new'
post '/login', to: 'sessions#create'
delete '/logout', to: 'sessions#destroy'
resources :users
end
表单在edit
操作上,而不是update
。
因此,您需要添加edit
操作,从中获取@user
实例变量:
def edit
@user = User.find(params[:id])
end