【问题标题】:Rails linking issue databaseRails 链接问题数据库
【发布时间】:2013-10-17 09:25:48
【问题描述】:

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

干杯

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您可以在页面模型上实现按年份过滤的范围:

    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,他们只会看到异常。不过,您可能仍希望更优雅地处理它。

    【讨论】:

    • 感谢您的快速回复。您的解决方案很有效。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多