2011-07-30 54 views
1

我在添加某个功能时遇到了一些麻烦。我正在购买/销售网站上工作,我希望能够比较帖子。这是我到目前为止有:在导轨中添加比较功能

在帖查看:

<%= button_to "Add to Compare", :action => "addCompare" %> 
在相应的控制器

@@a = Array.new() 

def addCompare 
    @@a << Post.id 
end 

所以,我想要做的是这篇文章的ID添加到阵列@@一个。当我测试这一点,我点击“加入比较”按钮,我与这个欢迎:

模板丢失

缺少模板帖子/ addCompare与{:区域设置=> [:恩,:在视图路径“/ home/mja32/470repo/traders/app/views”中输入:[]]::formats => [:html],:handlers => [:rxml,:rjs,:builder,:rhtml,:erb] ,“/var/lib/gems/1.8/gems/devise-1.4.2/app/views”

所以我想它试图重定向到一个视图。我如何阻止它做到这一点?我希望这个按钮所做的就是将帖子的ID添加到数组中,仅此而已。

由于提前,

马特

+0

'addCompare','@@ a = Array.new()'ewwww。这不是红宝石! –

+0

你应该真的需要阅读一些关于Ruby和Rails的教程...... – tokland

回答

3

首先,存储控制器的类变量持久性数据是不会工作,你希望它的方式。不能保证@@a将在您的下一个addCompare呼叫上成为相同的阵列;例如,您的下一个addCompare调用可能由不同的进程处理。另外,如果两个不同的客户拨打addCompare会发生什么?你真的想把他们的数据混合在一起吗?可能不会。您的第一项任务是将@@a替换为真正的每个用户持久性存储。

如果你想从你的控制器都返回任何结果,只是这样做在你controller method结束:

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

会告诉的东西已经被渲染,因此不需要滑轨尝试默认的呈现操作(即呈现posts/addCompare视图),并返回最多200个状态码给客户端。

一旦这项工作到位,你可能会想用:remote => true到AJAXify您的按钮:

:remote - 如果设置为true,将允许非侵入式JavaScript司机控制提交行为。默认情况下,这个行为是一个ajax提交。

所以这样的:

<%= button_to "Add to Compare", { :action => "addCompare" }, { :remote => true } %> 

注意button_to看起来是这样的:

button_to(name, options = {}, html_options = {}) 

:actionoptions:remotehtml_options,所以你必须明确地设置了哈希与{};你可以只包裹options在括号:

<%= button_to "Add to Compare", { :action => "addCompare" }, :remote => true %> 

但我喜欢手工包装他们二人的一致性。

+0

感谢mu。你提出一个好点。我很担心如何获得基本功能,以至于我还没有考虑到细节。对不起,如果我是愚蠢的,但我添加了上面的代码行,我得到一个空白页。我希望它留在相同的帖子页面。 – Matt

+0

@Matt:对不起,错过了那部分,请看我的更新。 –

+0

嗯谢谢,但仍然是一个空白页后,我点击按钮 – Matt