没有路线匹配[POST]“/ organizations / new”

时间:2014-04-10 18:28:06

标签: ruby-on-rails

在我的rails应用程序中,我获得了相当多的资源,并且已经创建了一些表单 - 但由于某种原因,我似乎没有得到一个特定的表单来使用新对象。我不确定是不是因为我使用的是三向has_many:通过关系还是因为我只是忽略了别的东西

以下是我的路线的样子

  resources :users, shallow: true do
    resources :organizations, :notifications
  end

  resources :organizations, shallow: true do
    resources :plans, :users, :notifications
  end

我的organizations_controller看起来像这样:

 def index
    @user = current_user
    @organizations = @user.organizations.to_a
  end

  def show
    @user = current_user
    @organization = Organization.find(params[:id])
  end

  def new
    @organization = Organization.new
  end

  def create
    @user = current_user
    @organization = Organization.new(organization_params)
    @organization.save
    redirect_to @organization
  end

在我的组织索引页面上,我链接到:

<%= button_to 'New Organization', new_organization_path, :class => 'btn btn-primary' %>

应该导致我的new.html.erb:

<%= form_for (@organization) do |f| %>
    <%= render 'layouts/messages' %>
  <div class="form-group">
      <%= f.label :name %>
      <%= f.text_field :name, class: 'form-control' %>
    </div>
    <div class="form-group">
      <%= f.label :website %>
      <%= f.text_area :website, class: 'form-control' %>
  </div>
    <%= f.button :class => 'btn btn-primary' %>
<% end %>

每次点击“新组织”,我都会收到以下错误:

No route matches [POST] "/organizations/new"

哪个是正确的 - 我没有接受POST请求的new_organizations_path。我知道我可以手动将表单的方法更改为GET,但不应该按照我的方式工作吗?我有另一种形式,它遵循相同的原则只是为了一个不同的资源,它完美地运作。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

除非指定了其他内容,否则

button_to将始终发送POST请求。 在另一种形式上,您必须使用link_to而不是button_to,这就是它在那里工作的原因。

您可以通过两种方式更改button_to,选择适合您的方式:

选项1:使用link_to

<%= link_to 'New Organization', new_organization_path, :class => 'btn btn-primary' %> 

选项2:使用button_to和方法:: get

<%= button_to 'New Organization', new_organization_path, method: :get, :class => 'btn btn-primary' %>