0

Rails 新手,我想知道解决这个问题的最佳方法。

我在视图中有一个索引、列表和结果页面:

我的路线文件有:

resources :pages do
 collection do  
  get :list
  get :result
 end
end

我有一个名为 results 的 mysql 数据库,ID 为年份(2000 -> 2013),产品名称。

我的控制器有:

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 -> 2013 的年份,我想要它做的是链接到列表视图并列出在之前的 link_to 索引中选择的产品和年份(例如 2013 将列出所有 2013 产品从数据库中),然后链接到显示更多产品信息的结果视图。

干杯

4

1 回答 1

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]如果无法转换为整数,这将引发异常。由于您不允许用户在任何地方输入参数,因此他们只有在尝试恶意篡改 url 时才会看到异常。不过,您可能仍希望更优雅地处理它。

于 2013-10-17T01:25:48.123 回答