我有一个帖子"投票" ,它是"文章" 这样的资源的成员:
bool match = Regex.IsMatch(@"^abc",@"^[a-zA-z_][a-zA-z_0-9]*$"); // TRUE. WHY?!
我想检查用户是否" LIKED" 该文章,然后他点击" DISLIKE" ,我会根据发送的参数修改记录。那么,如果没有"编辑/更新" 操作,只需找到该记录并对其进行修改,我就能做到吗?
答案 0 :(得分:5)
是的,您可以,只需在控制器中编写相应的操作。
此外,如果您没有编辑/更新/销毁/等,我建议删除它们的路线:
args
答案 1 :(得分:0)
我将根据发送的参数修改记录
要添加到vasfed
的答案,您必须坚持使用member
route将article
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
<强>更新强>
要回答您的评论,您会在tables
和models
之间感到困惑。
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