我是Ruby on Rails的新用户,当我尝试在不使用关联控制器的情况下向模型添加数据时,我感到困惑。我有一个控制器admins_controller,它具有管理功能,可以在“委员会”视图中执行向主体表添加主体(带有名称和颜色字段)。我在委员会视图中设置了一个form_for,但似乎无法配置我的路由以正确地将正文添加到数据库。
路由文件:
get 'admin' => 'admins#home'
get 'admin/committees' => 'admins#committees'
get 'admins/newbody' => 'admins#new_body'
resources :admins do
collection do
get :newbody
post :committees
end
end
委员会观点:
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@body, :url => {:controller => "admins", :action => "newbody"}) do |f| %>
<%= f.label :type %>
<%= f.select :name, ['Red', 'Blue', 'Green', 'White', 'Special Programs']%>
<%= f.label :name %>
<%= f.select :name, ['Senate', 'House', 'Executive', 'Executive',
'Supreme Court']%>
<p> </p>
<div class="col-md-12">
<%= f.submit "Create body", class: "btn btn-primary" %>
</div>
<% end %>
</div>
</div>
管理员控制器:
def committees
@body = Body.new
end
def newbody
@body = Body.new(body_params)
redirect_to committees
end
身体模型: class Body&lt;的ActiveRecord ::基
validates :name, presence: true, format: {with: /\b[A-Z].*?\b/}
validates :color, format: {with: /Red|White|Green|Blue|Special Programs/}
end
我得到的错误是:
ActionController::RoutingError (No route matches [POST] "/admins/newbody"):
答案 0 :(得分:0)
您收到此错误是因为您的路由文件没有为admins / newbody定义POST
方法。看起来您的routes.rb文件应该格式如下:
get 'admin' => 'admins#home'
resources :admins do
collection do
post 'newbody'
get 'committees'
end
end
这有一些值得注意的变化。首先,这会删除GET
'admins / newbody'的路线;因为您正在该路线上创建资源,所以您不应该使用GET
。它还将“admin / committee”路由更改为“admins / committee”,这更符合预期的Rails命名约定。
在AdminsController#newbody中,您可能还应该使用@body = Body.create(body_params)
,因为create会将新创建的记录保存到数据库中。