Rails链接问题数据库

时间:2013-10-17 00:29:21

标签: ruby-on-rails

对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年产品),然后链接显示更多产品信息的结果视图。

干杯

1 个答案:

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