在rails中,我可以在没有EDIT操作的情况下修改记录吗?

时间:2016-01-14 10:22:50

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个帖子"投票" ,它是"文章" 这样的资源的成员:

bool match = Regex.IsMatch(@"^abc",@"^[a-zA-z_][a-zA-z_0-9]*$"); // TRUE. WHY?!

我想检查用户是否" LIKED" 该文章,然后他点击" DISLIKE" ,我会根据发送的参数修改记录。那么,如果没有"编辑/更新" 操作,只需找到该记录并对其进行修改,我就能做到吗?

2 个答案:

答案 0 :(得分:5)

是的,您可以,只需在控制器中编写相应的操作。

此外,如果您没有编辑/更新/销毁/等,我建议删除它们的路线:

args

答案 1 :(得分:0)

  

我将根据发送的参数修改记录

要添加到vasfed的答案,您必须坚持使用member routearticle id传递给控制器:

#app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
   def vote
      @article = Article.find params[:id]
      # vote for article somehow
   end
end

您还可以清理路线:

#config/routes.rb
resources :articles, only: [:index, :show] do
   post :vote, on: :member #-> url.com/articles/:id/vote
end

<强>更新

要回答您的评论,您会在tablesmodels之间感到困惑。

votes表与vote功能相关性较小。您想要的功能范围围绕@article,因此Vasfed和我建议在articles控制器中使用方法(您在文章上投票)。

  

我可以在&#34; VOTE&#34;中编辑记录。没有&#34; EDIT&#34;动作。

在这种情况下,您不会&#34;编辑&#34;投票;您通过对其进行投票来编辑@article

答案@Vasfed表明您可以在vote控制器中创建articles方法,以管理针对@article投票的操作。

如果是我的应用,我就这样做:

#config/routes.rb
resources :articles do
   match :vote, via: [:post, :delete], on: :member #-> url.com/articles/:id/vote
end

#app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
   def vote
       @article = Article.find params[:id] 
       if request.post?
          @article.liked_by curent_user
       elsif request.delete?
          @article.disliked_by curent_user
       end
       redirect_to @article
   end
end