I have erb file in tencet contoller
<td><%= link_to "OK", post_path(post.id), method: :suit %></td>
和邮政控制者
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
假设您正在更新post.suit...
您必须在 config/routes.rb 中定义适合的路由:
resources :posts do
put :suit, on: :member
end
另外,你不能让方法成为:suit。它必须是方法之一,如发布、放置、获取等......
因此,在您的 .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
所以有几件事。首先,定义一个新路由:
resources :posts do
post :suit, on: :member
end
您的suit
方法已经到位(但是我不知道它应该做什么 - 从代码中,我希望它会引发异常)。请注意,这不是helper_method。
然后更新您的链接:
<td><%= link_to "OK", suit_post_path(post), method: :post %></td>
我希望您将在当前阶段收到模板缺失异常。如果您只想更新帖子,请将suit
操作更改为:
def suit
@post.update_attributes(suit: true)
redirect :back
end
如果你仍然遇到一些你不确定如何处理的其他异常,你可能需要阅读一些 Rails 书籍 - 它不是一个你可以通过阅读现有代码轻松学习的框架。
方法不是指控制器方法,而是 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
不会做你认为它做的事情。 它会导致链接创建一个不可见的表单,其中链接是允许它发布到应用的提交按钮。