我是铁轨上的红宝石的新手。我正在研究一个项目并遇到一个表格问题。我正在使用设计进行身份验证。我有一个具有管理员和用户角色的用户类。为用户设计的设备添加/更新方法正常工作。当我尝试为管理员创建编辑页面时,我遇到了“No route matches [PATCH]”错误。这是我正在使用的表格
<h4>Update Profile</h4>
<%= form_for @user, :url => {:controller => "admin", :action => "update" } do |f| %>
<%= hidden_field_tag(:id, @user.id) %>
<table>
<tr>
<td>First Name</td>
<td><%= f.text_field :first_name , :class => "form-control"%></td>
</tr>
<tr>
<td>Last Name</td>
<td><%= f.text_field :last_name , :class => "form-control"%></td>
</tr>
<tr>
<td>Email</td>
<td><%= f.text_field :email , :class => "form-control"%></td>
</tr>
<tr>
<td></td>
<td><%= f.submit "Update", :class => "btn btn-md btn-success pull-right" %></td>
</tr>
</table>
&LT;%端%GT;
这是我的控制器方法
def edit
end
def update
@user = User.find(params[:id])
if request.post?
if(@user.update_attributes(params[:first_name, :last_name, :email] ))
redirect_to :action => "admin_portal"
else
render :action => "edit"
end
end
end
我也有路线
get 'admin/update'
get 'admin/edit'
任何人都可以建议我如何解决这个问题。
答案 0 :(得分:4)
重点是:您仅使用HTTP方法设置GET
,对于更新,您需要PUT
或PATCH
方法。
有些约定何时使用PUT
或PATCH
,但在您的情况下,制定PATCH
路线可以解决您的问题,如您所说
patch 'admin/:1'
但是,显然你正在为自己编写一个针对每个REST方法的路由,并且Rails有一个&#34;帮助&#34;名为resources
的结构,为您创建所有REST方法。
您可以在config/routes.rb
上创建一个入口,例如:
resources :admins
它会为REST方法生成指向user_controller
并重命名为admin
的每条路径。只放置那行代码,相当于在config / routes上写下所有这些命令:
get 'admins', controller: 'admins', action: :index
get 'admin/:id', controller: 'admins', action: :show
get 'admin/new', controller: 'admins', action: :new
get 'admin/:id/edit', controller: 'admins', action: :edit
post 'admin', controller: 'admins', action: :create
patch 'admin/:id', controller: 'admins', action: :update
put 'admin/:id', controller: 'admins', action: :update
delete 'admin/:id', controller: 'admins', action: :delete
您可以在Rails guides上看到更多信息。它在创建路线方面有很多有用的建议。
答案 1 :(得分:0)
这是因为您生成form_for @user
的持久模型patch
,并且路由中只有get
。将get
更改为patch
。更多信息http://guides.rubyonrails.org/routing.html