创建指向已定义方法的链接?

时间:2011-04-29 05:23:28

标签: ruby-on-rails ruby methods

作为我的第一个Rails应用程序,我正在尝试整理一个简单的博客应用程序,用户可以在帖子上投票。我使用整数列(标题为“upvote”)生成Blogpost脚手架,用于跟踪投票计数。

Blogpost模型中,我创建了一个函数:

def self.voteup
  blogpost.upvote += 1
end

在Blogpost索引视图中,我想创建一个类似于:

的链接
link_to "Vote up" self.voteup

但这似乎不起作用。是否可以创建方法的链接?如果没有,你能指出我正确的方向来实现这一目标吗?

3 个答案:

答案 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 %>