作为我的第一个Rails应用程序,我正在尝试整理一个简单的博客应用程序,用户可以在帖子上投票。我使用整数列(标题为“upvote”)生成Blogpost
脚手架,用于跟踪投票计数。
在Blogpost
模型中,我创建了一个函数:
def self.voteup
blogpost.upvote += 1
end
在Blogpost索引视图中,我想创建一个类似于:
的链接link_to "Vote up" self.voteup
但这似乎不起作用。是否可以创建方法的链接?如果没有,你能指出我正确的方向来实现这一目标吗?
答案 0 :(得分:3)
您要做的是违反MVC设计原则。你应该在控制器动作中进行upvoting。您应该创建一个名为upvote的控制器操作。并将帖子ID传递给它。在控制器操作中,您可以使用传入的ID检索帖子并对其进行投票。
如果您需要在rails应用中进行认真投票,可以查看these gems
答案 1 :(得分:1)
您无法在视图中将Model方法映射到link_to。你可以在控制器中创建一个动作来访问Model方法并使用link_to映射它,如果动作不是CRUD,那么你应该在route.rb中为它定义一个路径.rb
答案 2 :(得分:1)
我假设您需要在blogspots表中增加upvote
列。重定向到方法是控制器作业,我们只能提供控制器方法的链接。您可以在Blogposts控制器中创建一个方法,如下所示:
def upvote_blog
blogpost = Blogpost.find(params[:id])
blogpost.upvote += 1
blogpost.save
redirect_to blogpost_path
end
在索引页面中
<% @blogposts.each do |blogpost| %>
...
<%= link_to "Vote up", :action => upvote_blog, :id => blogpost.id %>
...
<% end %>