添加某个功能有点麻烦我在一个买卖网站工作,我想能够比较职位以下是我目前掌握的情况:
在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/