在相应的 Controller 中: -6ren">
gpt4 book ai didi

html - 在 rails 中添加比较功能

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:04 25 4
gpt4 key购买 nike

我在添加某个功能时遇到了一些麻烦。我在一个买卖网站上工作,我希望能够比较帖子。这是我目前所拥有的:

在帖 subview 中:

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

在相应的 Controller 中:

@@a = Array.new()

def addCompare
@@a << Post.id
end

所以,我想做的就是将帖子的 ID 添加到数组@@a。当我测试这个时,我点击“添加到比较”按钮,我很高兴:

模板丢失

Missing template posts/addCompare with {:locale=>[:en, :en], :formats=>[:html], :handlers=>[:rxml, :rjs, :builder, :rhtml, :erb ]} 在 View 路径中“/home/mja32/470repo/traders/app/views”,“/var/lib/gems/1.8/gems/devise-1.4.2/app/views”

所以我猜它正在尝试重定向到一个 View 。我如何防止它这样做?我想让这个按钮做的就是将帖子的 ID 添加到数组中,仅此而已。

提前致谢

马特

最佳答案

首先,将持久数据存储在 Controller 的类变量中不会按照您希望的方式工作。无法保证 @@a 在您的下一次 addCompare 调用中会是同一个数组;例如,您的下一个 addCompare 调用可能由不同的进程处理。另外,如果两个不同的客户端调用 addCompare 会怎样?您真的想将他们的数据混合在一起吗?可能不会。您的首要任务是将 @@a 替换为真正的每用户持久存储。

如果您不想从 Controller 返回任何内容,只需在 controller method 的末尾执行此操作即可:

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

这将告诉 Rails 某些东西已经被渲染,所以它不需要尝试默认的渲染操作(即渲染 posts/addCompare View )并且只返回 200状态代码给客户端。

一旦就绪,您可能希望使用 :remote => true 对您的按钮进行 AJAX 化处理。 :

:remote - If set to true, will allow the Unobtrusive JavaScript drivers to control the submit behaviour. By default this behaviour is an ajax submit.

所以这样:

<%= 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com