[见后面的回答更多]
我认为这只是一个简单的rails问题,主要是关于我如何命名我的模型并在我的视图中引用它们。所以有一点背景,我正在使用vote_fu
插件,我觉得这很棒,但是我很难通过以下链接进行投票:
<%= link_to "vote for", current_user.vote_for(answer) %>
其中current_user
是帮助程序并返回登录时发出此请求的当前用户,问题可能在于我声明answer
属于我的question
模型的方式,
任何帮助都非常感谢,即使你只是帮助我走正确的道路!
哦!它也适用于控制台...所以如果我这样做:
user = User.find(1)
user.vote_for(Question.last)
它按预期工作。
答案 0 :(得分:1)
这个很老的例子在视图中有这个:
<%= link_to "Vote Up", :url => current_user.vote_for(answer), :method => :post %>
但是这使得URL在查询字符串中具有投票方法...他正在使用rjs,我更喜欢使用jquery,不知道如何继续下一步让它工作而不投票对于页面上的所有答案?
答案 1 :(得分:1)
澄清“vote_for
属于您的控制器”:
你有:
<%= link_to "Vote Up", current_user.vote_for(answer) %>
你真正想要的是:
<%= link_to "Vote Up", :controller => 'my_controller', :action => 'vote', :id => answer %>
current_user.vote_for
方法是服务器上的一种方法。如果在视图(.rhtml文件)中调用该方法,则会在呈现页面时进行投票,而不是在用户单击链接时进行投票。相反,在适当的控制器上创建一个'投票'方法(我在这里称它为my_controller
,随心所欲地制作它)。然后vote
方法看起来像vote_fu示例。 link_to创建了一个指向投票操作的超链接。
如果您尝试通过ajax执行此操作,请将link_to
替换为link_to_remote
。
<%= link_to_remote "Vote Up", :url => { :controller => 'my_controller', :action => 'vote', :id => answer } %>
如果您的views / my_controller / vote模板文件是'.rjs',则当该方法的结果返回到该页面时,将执行该文件中的javascript。如果它是'.rhtml',你应该查看link_to_remote
的助手,以便轻松更新页面上的div,其中包含方法结果的包含(http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M001645 - 你想要{{1}选项)
答案 2 :(得分:1)
current_user.vote_for(answer)
会立即调用该方法。仅仅因为它在: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}
答案 3 :(得分:0)
布拉赫!我解决了问题的第一部分......好吧......也许,似乎我的解决方案不是很安静,这就是我所做的:
<%= link_to "Vote Up", :url => current_user.vote_for(answer), :method => :post %>
所以这里奇怪的是它可以工作,但是每次我重新加载页面时,它都会向所有用户添加一个回答(或大多数博客都会关注的评论),它也会产生网址{{ 1}},我不确定我的下一步行动计划是什么。
经过多一点调查后,这个例子中的vote_fu示例应用程序在控制器的创建操作中有这个,但我甚至没有控制器用于我的投票模型并且投票仍在进行,任何想法?
localhost/questions/65?method=post&url=true