0

好的,可能是新手的错误,但我希望有人能帮助我。让我首先为这个例子的性质道歉。我的应用程序需要知道狗是否已绝育,并在狗列表中查看此选项。

示例...
Dog1 | 所有者 | 绝育狗2 | 所有者 | 未绝育

该视图看起来很棒,甚至可以正确返回属性问题是当我单击 Neutered/Not neutered 链接时,它不会切换数据库中的字段并且我得到一个 Routing Erro No route matches [POST] "/dogs/3" .

我有一个名为 Dog 的数据库,它有一个布尔选项:neutered 我在 dogs_controller.rb

...
def neuter
@dog = Dog.find(param[:id])
@dog.toggle!(:admin)
flash[:success] = "改变狗的绝育状态"
redirect_to dogs_url
end
...

在我的 routes.rb 我有

...
资源 :dogs do
member do
get :watching, :watchers (在程序中的其他地方使用) end
end
...

在列出我拥有的狗的部分中

...
<%= link_to dog.name, dog %>
<%= 如果 dog.neutered?%>
<%= link_to "Neutered", dog, method: :neuter, data: { confirm: "这会将狗标记为已绝育。你确定吗?" } %>
<% else %>
<%= link_to "Not Neutered", dog, method: :neuter, data: { confirm: "这会将狗标记为未绝育。你确定吗?" } %>
...

那么我错过了什么?我确定这很简单,但我似乎找不到它。我尝试了其他几个选项,但似乎没有任何解决方法。

4

1 回答 1

1

所以这里发生了一些事情。

首先,link_to如果您想链接到中性操作,您的做法是不正确的。您要么需要命名路线:

<%= link_to "Neutered", neuter_dog_path(dog), method: :post %>

或者您需要准确指定控制器和操作:

<%= link_to "Neutered", controller: :dogs, action: :neuter, id: dog.id %>

其次,如果你想使用命名路由,你需要在你的路由文件中添加一个部分。

resources :dogs do
  member do
    post :neuter
  end
end

然后链接应该可以正常工作。

于 2012-11-01T17:12:58.563 回答