Volt框架路由:何时调用操作?

时间:2015-10-15 21:39:49

标签: ruby routing voltrb

我有一个应用程序,将根据以下路线显示图像集合:

client '/{{_type}}', controller: 'main', action: 'index'
client '/', {}

我的想法是,MainController#index我可以查看params._type并执行以下查询:

@uploads = store._uploads.where({category: params._type})

我的导航栏中包含以下链接://spotlight/nature等。第一个匹配默认路由,因此调用index操作。然后单击链接到/spotlight的导航项再次调用index操作(预期响应)。但是......如果我单击nature的导航项,则不会调用index操作,则不会刷新集合,也不会显示与该类别对应的图像。

我可能会采用“Rails”视图来说明路由应该如何工作,因为我读到了这个:

It should also be noted that if a link is clicked and the controller/view to render the new URL is within the current component (or an included component), the page will not be reloaded, the URL will be updated via the HTML5 history API, and the params hash will update to reflect the new URL. You can use these changes in params to render different views based on the URL.

来自Volt文档的上述引文告诉我,我不能指望完成我所概述的路线。

任何人都可以澄清实现这一目标的“正确”方法是什么?

添加@ ryanstout的答案,因为它会通过适当的代码格式化来影响它。

client '/{{_type}}', controller: 'main', action: 'index'
#          ^^^  Note that the underscore may not be included
#               here or you will have an undefined value

def uploads
  store._uploads.where({category: params._type})
end

第二部分允许创建一个被动数据源,当路由发生变化时,这些变化会影响页面。

1 个答案:

答案 0 :(得分:1)

当视图文件更改时,将从视图绑定调用操作方法。在这种情况下,您的参数正在更改,但它不会影响视图文件。处理这种情况的一种方法是使用方法而不是uploads

的实例变量

不要设置@uploads,而是执行以下操作:

def uploads
  store._uploads.where({category: params._type})
end

然后在视图中使用您将使用@uploads的上传。现在,当params._type发生变化时,取决于uploads方法的任何内容都将失效并重新呈现。

希望有所帮助。另外,我正在考虑在视图绑定中添加一些内容以使其更容易,但我认为它的行为与它一样好。