Rails Form_for与Model No Controller

时间:2015-07-12 17:19:29

标签: ruby-on-rails ruby

我是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>&nbsp;</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"):

1 个答案:

答案 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会将新创建的记录保存到数据库中。