我在tencet contoller中有erb文件
<td><%= link_to "OK", post_path(post.id), method: :suit %></td>
和Post的控制器
helper_method :suit
def suit
@post.suit = true
end
路线
resources :posts
我收到此错误“没有路线匹配[POST]”/ posts / 77“”
我该如何解决?
如何通过论证?
<%= link_to "OK", suit_post_path(post), method: :put %>
我想要传递对象帖子并进入控制器
def suit
@post = params[:post]
@post.suit = true
if @post.save
redirect_to tencet_show_path
end
end
答案 0 :(得分:2)
假设你正在更新post.suit ......
您必须在config / routes.rb中定义套装路线:
resources :posts do
put :suit, on: :member
end
另外,你不能有这样的方法:适合。它必须是其中一种方法,如post,put,get等......
所以,在你的.erb中,你会得到:
<td><%= link_to "OK", suit_post_path(post.id), method: :put %></td>
在控制器中:
def suit
@post.suit = true
if @post.save
redirect_to your_desired_path
else
render :previous_controller_action
end
end
答案 1 :(得分:0)
所以有几件事。首先,定义一条新路线:
resources :posts do
post :suit, on: :member
end
你的suit
方法已经到位(但是我不知道它应该做什么 - 从我希望它会引发异常的代码)。请注意,这不是helper_method。
然后更新你的链接:
<td><%= link_to "OK", suit_post_path(post), method: :post %></td>
我希望您在当前阶段会收到TemplateMissing异常。如果您只想更新帖子,请将suit
操作更改为:
def suit
@post.update_attributes(suit: true)
redirect :back
end
如果你仍然得到一些其他例外,你不知道该怎么做,你可能需要阅读一些Rails书籍 - 它不是一个你可以通过阅读现有代码轻松学习的框架。
答案 2 :(得分:0)
在这种情况下的方法不是指控制器方法而是HTTP方法。这也是炸毁你的路线的原因。
创建自定义操作
def toggle_suit
@post.suit = true
render :show
end
并更新您的路线
routes :posts do
post '/suits' => 'posts#toggle_suits', as: :toggle_suit
end
最后更新你的erb
<%= link_to '...', toggle_suit_url(post: post), method: :post %>
这里带走的是method: :suit
没有按照你的想法去做。它会导致链接创建一个不可见的表单,其中链接是提交按钮,允许它发布到您的应用程序。