对rails很新,我想知道解决这个问题的最佳方法。
我在视图中有一个索引,列表和结果页面:
我的路线档案有:
resources :pages do
collection do
get :list
get :result
end
end
我有一个名为结果的mysql数据库,其中包含id,year(2000 - > 2013),product_name。
我的控制器有:
def index
@years = Result.group('year').order('year DESC')
end
我的索引视图有:
<table class="table">
<% @years.each do |year| %>
<tr><td>
<%= link_to year.year, list_pages_path %>
</td></tr>
<% end %>
</table>
其中列出了2000年的年份 - &gt; 2013年很好,我想要它做的是链接到列表视图并列出在前一个link_to索引上选择的产品和年份(例如2013年将列出数据库中的所有2013年产品),然后链接显示更多产品信息的结果视图。
干杯
答案 0 :(得分:0)
您可以在将按年过滤的页面模型上实现范围:
class Pages < ActiveRecord::Base
scope :year, ->(year) { where(year: year) }
end
然后更改link_to
以发送年份的查询参数:
link_to year.year, list_pages_path(year: year.year)
最后,在控制器中
def list
@pages = Page.year(params[:year])
end
您需要确保已连接正确的操作 - 我认为它将默认为PagesController#year
。
另外,为了彻底,您要确保检查输入以防止SQL注入。也许是这样的事情:
def list
@pages = Page.year(Integer(params[:year])
end
如果params[:year]
无法转换为整数,则会抛出异常。由于您不允许用户在任何地方输入参数,因此他们只会在尝试恶意篡改网址时才会看到异常。不过,您可能仍希望更优雅地处理它。