Javascript Rails“link_to”方法多次发布

Javascript Rails“link_to”方法多次发布,javascript,ruby-on-rails,ruby,activerecord,Javascript,Ruby On Rails,Ruby,Activerecord,[有关更多信息,请参见后面的答案] 我认为这只是一个简单的rails问题,主要是关于如何命名模型并在视图中引用它们。有一点背景知识,我正在使用vote\u-fu插件,我认为这很好,但是我很难从以下链接获得投票: <%= link_to "vote for", current_user.vote_for(answer) %> 它工作正常。诸如此类!我解决了问题的第一部分。。。好。。。也许,我的解决方案似乎不是很安静,以下是我所做的: <%= link_to "Vote Up",

[有关更多信息,请参见后面的答案]

我认为这只是一个简单的rails问题,主要是关于如何命名模型并在视图中引用它们。有一点背景知识,我正在使用
vote\u-fu
插件,我认为这很好,但是我很难从以下链接获得投票:

<%= link_to "vote for", current_user.vote_for(answer) %>

它工作正常。

诸如此类!我解决了问题的第一部分。。。好。。。也许,我的解决方案似乎不是很安静,以下是我所做的:

<%= link_to "Vote Up", :url => current_user.vote_for(answer), :method => :post %>

该示例非常古老,视图中有以下内容:

<%= link_to "Vote Up", :url => current_user.vote_for(answer), :method => :post %>
当前用户。投票给(答案),:方法=>:post%>
但这使得URL在查询字符串中具有投票方法。。。他使用的是rjs,而我更喜欢使用jquery,不知道如何进行下一步,让它发挥作用,而不是投票支持页面上的所有答案?

关于“
投票支持
的澄清属于您的控制器”:

你有:

<%= link_to "Vote Up", current_user.vote_for(answer) %>

如果您的views/my_controller/vote模板文件为“.rjs”,则当方法的结果返回到页面时,将执行该文件中的javascript。如果是“.rhtml”,您应该查看
link\u to\u remote
的帮助程序,以便轻松更新页面上包含方法结果的div(-您需要
:update
选项)

当前用户。投票(答案)
将立即调用该方法。仅仅因为它在:url中并不意味着它得到任何特殊处理。它将像任何其他ruby方法一样执行

你可能想做这样的事情

// view
<%= link_to "Vote up", :url => vote_up_answer_path(answer), :method => "post" %>

// controller
class AnswersController < ApplicationController
  def vote_up
    answer = Answer.find(params[:id])
    current_user.vote_up(answer)
    redirect_to :back
  end
end

// routes
map.resources :answers, :member => {:vote_up => :post, :vote_down => :post}
//查看
投票路径(答案):方法=>“发布”%>
//控制器
类应答器控制器<应用程序控制器
投票表决
answer=answer.find(参数[:id])
当前用户。投票支持(回答)
重定向到:返回
结束
结束
//路线
map.resources:answers,:member=>{:vote\u up=>:post,:vote\u down=>:post}

您确认当前用户实际返回了一个用户对象吗?因为我不知道投票,所以我只发表评论,但是
当前用户。投票(答案)
返回什么?你不应该有一个包含restful资源的模型的路径或实例吗?嘿@theIV你是对的。。。我确实需要一条路径,但既然它是一个有很多关联的主题,那么这条路径是什么样子的呢?我对此感到困惑…user\u answer\u voates\u path(answer)@mike,是的,这很好,console给了我当前的用户对象的全部。因此,我按照文档建议将其设置为一个路径,但我得到了未定义的方法“user\u answer\u voates\u path”,似乎这不是正确的路径,请参见此示例:如我上面所说,该呼叫的
投票权属于您的控制器
vote_for
投下一票。它已经在插件的功能中,我还需要把它放在控制器中吗?你提到它在控制台中工作。您正在向您的用户对象发送一条消息“为最后一个问题投票”。现在想象一下Ruby构建链接时发生了什么:在构建链接时,您正在向用户对象发送一条消息“投票支持这个答案”。让我们看一下示例代码-/examples/vots/_voteable_vote.html.erb-如果你想使用这个插件,最简单的方法就是在这个视图之后对你的代码建模。哇,很棒的反馈,这很有帮助,我想我应该让部分与示例相同,这样可以防止在重新加载页面时进行投票,因为请求不会被提出。。。我想。我明天试试。谢谢你的反馈。
<%= link_to "Vote Up", current_user.vote_for(answer) %>
<%= link_to "Vote Up", :controller => 'my_controller', :action => 'vote', :id => answer %>
<%= link_to_remote "Vote Up", :url => { :controller => 'my_controller', :action => 'vote', :id => answer } %>
// view
<%= link_to "Vote up", :url => vote_up_answer_path(answer), :method => "post" %>

// controller
class AnswersController < ApplicationController
  def vote_up
    answer = Answer.find(params[:id])
    current_user.vote_up(answer)
    redirect_to :back
  end
end

// routes
map.resources :answers, :member => {:vote_up => :post, :vote_down => :post}