好吧可能是新手的错误,但我希望有人可以帮助我。让我首先为这个例子的本质道歉。 我的应用程序需要知道狗是否已被绝育并在狗列表中查看此选项。
示例...
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:"这会标记狗没有绝育。你确定吗?" }%>
...
那我错过了什么?我确定它很简单,但我似乎无法找到它。我已经尝试了其他几种选择,但似乎没有什么可以解决它。
答案 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
然后链接应该正常工作。