从 erb 轨道调用方法



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不会做你认为它做的事情。 它会导致链接创建一个不可见的表单,其中链接是允许它发布到应用的提交按钮。

最新更新