.toggle!返回“无路线”红宝石

时间:2012-11-01 16:27:40

标签: ruby-on-rails ruby sqlite

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

示例...
Dog1 |老板|绝育 Dog2 |老板|没有绝育

视图看起来很棒,甚至可以正确返回属性问题是当我点击Neutered / Not neutered链接时它没有切换数据库中的字段而我得到路由错误没有路由匹配[POST]&#34 ; /狗/ 3&#34 ;.

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

  

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

在我的routes.rb中我有

  

...
      资源:狗干           会员           get:观看,:观察者(在程序中使用的其他位置)         结束
      结束
  ......

在我列出的狗的部分

  

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

那我错过了什么?我确定它很简单,但我似乎无法找到它。我已经尝试了其他几种选择,但似乎没有什么可以解决它。

1 个答案:

答案 0 :(得分: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

然后链接应该正常工作。