添加某个功能有点麻烦我在一个买卖网站工作,我想能够比较职位以下是我目前掌握的情况:
在posts视图中:

<%= button_to "Add to Compare", :action => "addCompare" %>

在相应的控制器中:
@@a = Array.new()

def addCompare
   @@a << Post.id
end

所以,我要做的就是将post的id添加到数组@@a中。当我测试这个时,我单击“add to Compare”按钮,大家欢迎我这样做:
缺少模板
缺少模板posts/addCompare和{:locale=>[:en,:en],:formats=>[:html],:handlers=>[:rxml,:rjs,:builder,:rhtml,:erb]}视图路径“/home/mja32/470repo/traders/app/views”,“/var/lib/gems/1.8/gems/devieve-1.4.2/app/views”
所以我想它是在试图重定向到一个视图。我该如何阻止它这样做我只想用这个按钮将post的id添加到数组中,而不需要其他操作。
提前谢谢你,
马特

最佳答案

首先,将持久性数据存储在控制器的类变量中不会按照您希望的方式工作。不能保证@@a在您的下一个addCompare调用上是相同的数组;例如,您的下一个addCompare调用可以由不同的进程处理。另外,如果两个不同的客户调用addCompare,会发生什么情况你真的想把他们的数据混在一起吗?可能不是。您的第一个任务是将@@a替换为真正的每用户持久存储。
如果您不想从控制器返回任何内容,请在controller method结束时执行此操作:

render :nothing => true, :status => :ok

这将告诉Rails已经呈现了一些内容,因此它不需要尝试默认的呈现操作(即呈现posts/addCompare视图),并且只向客户端返回200个状态代码。
一旦设置好,您可能会想用:remote => true来调整按钮的大小:
:remote-如果设置为true,将允许不引人注目的javascript驱动程序控制提交行为。默认情况下,此行为是ajax提交。
所以这个:
<%= button_to "Add to Compare", { :action => "addCompare" }, { :remote => true } %>

注意button_to看起来像这样:
button_to(name, options = {}, html_options = {})

:action用于options,而:remote用于html_options,因此必须用{}显式设置散列;可以用大括号将options括起来:
<%= button_to "Add to Compare", { :action => "addCompare" }, :remote => true %>

但我更喜欢用手把它们包起来。

关于html - 在Rails中添加比较功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6885369/

10-09 14:40