我正在尝试为我的applcation
中的注册用户创建更新表单查看:
<h2><%= @title =%></h2>
<% if @user.errors.any? %>
<div id="error">
<h2><%= pluralize(@user.errors.count,"error") %> prohibited this user from registering</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg%></li>
<%end%>
</ul>
</div>
<%end%>
<%= form_for :user do |form| %>
<div class="reg_form">
<label for="first_name">First Name: </label>
<%= form.text_field :first_name %>
</div>
<div class="reg_form">
<label for = "last_name">Last Name: </label>
<%= form.text_field :last_name %>
</div>
<div class="reg_form">
<%=form.submit "Update"%>
</div>
<%end%>
Controller:users_controller.rb
def index
unless session[:user_id]
flash[:notice] = "Please Login first"
redirect_to :action => "new"
end
@title = "Profile"
@user=User.find(session[:user_id])
end
def edit
@title="Profile Update"
@user = User.find(session[:user_id])
if param_posted?(:user)
if @user.update_attributes(params[:user])
flash[:notice] = "Update Successful"
redirect_to :controller => "user", :action => "profile"
end
end
end
我收录了&#34;编辑&#34; =&gt; &#39;用户编辑#&#39;在routes.rb中。但是,我收到一个错误 &#39;没有路线匹配[POST]&#34; / users / edit&#34;&#39;
感谢任何帮助。谢谢。
答案 0 :(得分:0)
您需要POST
路线来处理表单提交。在routes.rb中尝试resources :users
并在命令提示符下执行rake routes
以查看所有可用路由。
我建议您查看Rails Guides并查看使用scaffold
创建的所有方法,以及Rails如何处理针对每种方法的不同内容的路由。
答案 1 :(得分:0)
RESTful edit
路由应使用GET动词。 vanilla resource#edit
方法不会更改数据库,而只是放置一个填充了所选资源值的表单。将该表单提交到resource#update
(使用PUT动词)可以实际更改数据库。
因此,您的users#edit
方法不会执行标准RESTful编辑操作。除非你有充分的理由并且你仔细记录了这个原因,否则我建议使用标准方式。我同意花时间查看rails路由指南和一个vanilla控制器会很有用。