自定义动态路由并从URL获取ID

时间:2014-01-04 11:46:43

标签: ruby-on-rails

我有一个型号名称“profit”,它有一个表名利润和表“product_id”,“client_id”,“grossprofit”的3列

现在在我的index.html.erb页面中,我可以选择show as

<td><%= link_to 'Show', profit %></td>

当我点击显示链接时,我转到显示页面,链接变为

http://localhost:3000/profits/1
http://localhost:3000/profits/2

我正在获取利润表的ID,但我需要在我的网址中使用product_id和client_id,如下所示

http://localhost:3000/profits/3/5

其中3将是product_id,5将是client_id

我需要做些什么更改来获取此网址?如何在控制器的show动作中从网址获取product_id和client_id?

模型之间的关联是

product: has_many  profits
client: has_many profits
profit: belongs to product and client

3 个答案:

答案 0 :(得分:1)

你在routes.rb文件中输入错误的路由请将其声明为:

resources :profits do
 resources :products, :clients
end

答案 1 :(得分:1)

routes.rb

resources :profits do    
  get ":product_id/:client_id", :action => :show, :as => :show, :on => :collection
end

视图

<%= link_to 'Show', show_profits_path(profit.product_id, profit.client_id) %>

点击链接时的开发日志是

Started GET "/profits/5/3" for 127.0.0.1 at 2014-01-04 20:42:10 +0800
Processing by ProfitsController#show as HTML
  Parameters: {"product_id"=>"5", "client_id"=>"3"}

答案 2 :(得分:0)

<强>路线

HarsHarl&amp; cenyongh建议,你最好看Nested Resources

您遇到的问题是您无法访问product_idclient_id vars,除非它们存储在会话中。因此,您必须通过URL

传递它们

我会用这个:

resources :profits do
    get ":product_id/:client_id", to: "show"
end

这将创建此路线:

/profits/13/5

更重要的是,它会将这些参数传递给product_idclient_id到show动作