在我的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,但不应该按照我的方式工作吗?我有另一种形式,它遵循相同的原则只是为了一个不同的资源,它完美地运作。
提前感谢您的帮助!
答案 0 :(得分:1)
button_to
将始终发送POST
请求。
在另一种形式上,您必须使用link_to
而不是button_to
,这就是它在那里工作的原因。
您可以通过两种方式更改button_to
,选择适合您的方式:
<%= link_to 'New Organization', new_organization_path, :class => 'btn btn-primary' %>
<%= button_to 'New Organization', new_organization_path, method: :get, :class => 'btn btn-primary' %>