Rails4Link_创建新记录-请求类型



我在Rails 4上。

刚刚创建了一个收藏夹模型&控制器,用户可以在其中收藏文章。我已经设置好了,当用户点击链接时,它会路由到favorites_controller中最喜欢的动作。现在,它是一个get请求,在操作的内部,它只是创建一个新的收藏夹。

我的问题是…这是get请求可以吗?我觉得post请求可能会更好(因为表单使用post来创建东西),但由于这种情况下没有表单,我决定get请求也可以。这样可以吗?还是皱着眉头?

这是我认为的链接:

<%= link_to favorite_path(title: @article.title, id: @article.id) do %>
  <span class="glyphicon glyphicon-star-empty"></span>
<% end %>

以及它在控制器中路由到的动作:

def favorite
    current_user.favorites.create(article_id: params[:id], 
                                  article_title: params[:title])
    flash[:success] = "You added this page to your favorites."
    redirect_to request.referrer || root_url
end

和我的路线。rb:

get    'favorite'   => 'favorites#favorite'

一切都很好,只是想澄清一下get的请求,以及这是否是实现我正在做的事情的最佳方式。如果已经有关于这方面的文件,请通过我的方式发送。

不,您不应该使用get请求来创建事物或更改状态。

原因很简单:搜索引擎会跟踪链接并触发该操作。或者一些浏览器可能会预加载链接以加快速度。在这两种情况下,您都将创建记录,尽管用户从未选择单击链接。

相反,只需告诉Rails使用一些javascript来伪造post请求(注意method: :post部分):

<%= link_to(favorite_path(title: @article.title, id: @article.id), 
            method: :post) do %>
  <span class="glyphicon glyphicon-star-empty"></span>
<% end %>

有关详细信息,请阅读有关link_to的文档。

最新更新