Rails 求助一下,Rails 里面如何在 view 里面向控制器传递参数

nicetyler · 2017年09月20日 · 最后由 nicetyler 回复于 2017年09月20日 · 2151 次阅读

我这里要做一个产品中心页面,显示所有的产品分类和产品列表,我先根据 type 中 class_code = product 判断出来产品分类,然后在根据 type_id 的值找到对应分类下的所有产品,我想用嵌套循环,于是代码如下图所示,这是视图中主要的代码

<% @product_list.each do |d| %>
     <div class="col-md-3 col-xs-6">
       <ul>
         <li class="title">
           <%= link_to"#{d["description"]}",products_index_path(:type_id => d["id"]) %>
         </li>

         <% @product_lists.each do |f|%>/*****主要就是这个@product_lists变量想把d["id"]的值传给:type_id****/
           <li>
             <%= link_to"#{f["name"]}",products_show_path(:id => f["id"]) %>
           </li>
         <% end %>

         <li class="hs_see_more">
           <%= link_to"查看更多>>",products_index_path(:type_id => d["id"]) %>
         </li>
       </ul>
     </div>
     <% end %>

这是控制器的代码,我是调用的存储过程

def product_center

  o_type = Type.new
  o_type.free_result
  @product_list = o_type.type_list("PRODUCT")

  type_id = params[:type_id]
  type_id = type_id.to_i
  if type_id <12 then
    type_id = 12
  end
  puts type_id

  o_product = Product.new
  o_product.free_result
  @product_lists = o_product.product_index(type_id,0,0)
end

就是我在视图中获取到的 d["id"] 的值怎么样能够传递给参数:type_id

有人知道吗,这个问题应该不是很难😭

2 楼 已删除

最后用了个傻办法,在控制器里面写了个嵌套函数,然后在视图里面直接遍历两次,这是我的代码

def product_center

   o_type = Type.new
   o_type.free_result
   @product_list = o_type.type_list("PRODUCT")

   @pd_list = Array.new
   @product_list.each do |p|
     o_product = Product.new
     o_product.free_result
     @product_lists = o_product.product_index(p["id"],0,0)
     @pd_list.append(@product_lists)
   end
   @pd_list
 end

视图代码

<% @pd_list.each do |d| %>
   <div class="col-md-3 col-xs-6">
     <ul>
       <li class="title">
         <%= link_to"#{d[0]["type_description"]}",products_index_path(:type_id => d[0]["id"]) %>
       </li>
       <% d.to(3).each do |f| %>
         <li>
           <%= link_to"#{f["name"]}",products_show_path(:id => f["id"]) %>
         </li>
       <% end %>
       <li class="hs_see_more">
         <%= link_to"查看更多>>",products_index_path(:type_id => d[0]["id"]) %>
       </li>
     </ul>
   </div>
   <% end %>

看的有点糊涂。首先路由不符合规范,其次 type 和 product 应该是一对多或者多对多关系,应该不用找起来这么复杂。

bobo 回复

主管不让我用 rails 里面的一些规定,让我自己写,所以写的有点不伦不类的😂

nicetyler 回复

好奇怪的要求。。。用 rails 框架还不让用 rails 的一些推荐方法。

<% @pd_list.each do |d| %>

这句话有 Bug,一旦@pd_list 为 nil,就 500 error 了。 我喜欢用下面的方式写循环

<% @pd_list.try(:each) do |d| %>
bobo 回复

ok 已收纳👍

需要 登录 后方可回复, 如果你还没有账号请 注册新账号